ユーザー必読!コマンドライン(DOS Pt.6) at WIN
ユーザー必読!コマンドライン(DOS Pt.6) - 暇つぶし2ch586:名無し~3.EXE
08/04/04 16:11:15 c0lFiKIy
ちょっと先生方にお力を
(↓サンプル)
FOR %i IN (*.txt) DO @echo %i 
で.txtをひらい出そうとすると
test.txt
testtest.txt
test.txttest    ←
test.txttxt     ←
test.txtAAAAAA ←
余分なものもひらってしまいます
*.txt*やってるわけじゃないのにコマンドプロンプトはどういう理屈で上のものをひらうでしょうか
.txtで終わってるテキストだけ正しく抽出するにはどうやったら
出来たら上のFORをベースに改良する方法でお願いします
現在FORで組んでしまってるので根本的に別方法はまずいので 

587:名無し~3.EXE
08/04/04 16:31:21 O5RX4LBM
FOR %i IN (*.txt) DO @if %~xi==.txt echo %i

588:名無し~3.EXE
08/04/04 18:42:54 HotDOmeE
>>586
今気づいたけど dir も同じよくわからん仕様
dir *.txt → 586の全部
dir *.txtt → 該当無し
dir *.txttxt → test.txttxt
dir *.tx → 該当無し

拡張子が3文字の時に限り後に何が付いていても全部表示する謎仕様。
さらに、*.txt* だと名前順だが、 *.txt だとベースは名前順だがtxt以降に
文字があるファイルはエントリ順になる超謎仕様。

さすがMS。

589:名無し~3.EXE
08/04/04 18:49:16 O5RX4LBM
謎なものか
dir /x してみ

590:名無し~3.EXE
08/04/04 19:14:07 c0lFiKIy
>>587-589
出来ました

こういう仕様になってるのには何か深い理由がありそうですね。
こういう事情を知らずに各種ソフトの.iniファイルを別のものに一時交換するときに
.iniAAAAA とかを多用しているので困っていました
どうもありがとうございました

591:590
08/04/04 19:43:54 c0lFiKIy
わあああ、ちょっと実験したら今まで信じてきたやつも全部アウトか
*.txtAAAとかあればそれも全部混ざってコピーされてしまう
なんで気がつかなかったんだろう。反省しろよ俺
無知は恐ろしいと実感反省した4月4日をMyコマンド記念日としよう

par1よりこれも全部アウト
「888 名前:名無し~3.EXE 投稿日:02/01/20(日) 13:05
>>884
@echo off
for %%i in (*.txt) do type %%i >> new.txt

これをバッチファイルとして保存してダブルクリックしろ。
全てのテキストファイルが連結されて、
new.txtというファイルが作られる。

889 名前:名無し~3.EXE 投稿日:02/01/20(日) 13:21
それだけなら copy *.txt new.txt でいいでしょ。」

たぶん中上級者の方々には既知の話だったんでしょうね
スレ汚しスマソ


592:名無し~3.EXE
08/04/04 20:15:21 7OrQUO4u
8.3名の生成機能、もういい加減デフォルトOffにすべきだよなぁ。。。
つーか10年くらい前でもよかった。

593:名無し~3.EXE
08/04/05 07:25:56 16jOobyH
DOS時代に「名前8文字」「拡張子3文字」だったのを未だに引きずってるんだなあ。

594:名無し~3.EXE
08/04/05 19:16:07 oeBKfFDa
重複行の削除を外部ソフトを入れずにやる方法をネットで検索したらこんなのがありました
--------------------------------------uniq.bat
echo off
set prev=
if not exist "%1" goto error
for /f "tokens=* delims=" %%L in ( %1 ) do call :sub %%L
goto exit
:sub
if not "%prev%"=="%*" set prev=%*&&echo %*
goto :EOF
:error
echo.
echo 表示したいファイル名を指定してください。
echo [例] uniq.bat file.txt
echo.
:exit
空白改行等には対応してないとのこと

これは画面上に表示するだけなのでファイルに出力するために
echo %* の後に>>new.txtとかつけてもエラーが出ます
newファイルに出力するためにはどうしたらいいでしょうか?

検索したサイトはなぜかサイトを開くたびにスクリプト警報が出まくるので
2chブラウザでもリンクさせないようにしましたのでご了解ください
www.fpcu.jp/dosvcmd/bbs/log/unixdoswindows/3-0062.html



595:名無し~3.EXE
08/04/05 19:19:45 oeBKfFDa
補足しますと
newファイル出力だけが必要で、画面表示は必要ないということです
&&echo %*を&&(echo %*)>>new.txtとかに変えても全部エラーでした

596:名無し~3.EXE
08/04/05 20:21:46 opCsAdvJ
uniq.bat >new.txt


597:名無し~3.EXE
08/04/06 13:45:44 +PcLNC77
uniq.bat file.txt>new.txt
でしょ。

ところで、画面への出力とファイルへの出力を同時にやる方法は無いのかな?
内部で交互に出力しなきゃダメ?

598:名無し~3.EXE
08/04/06 16:21:31 nlrXvzZ0
>uniq.bat file.txt>new.txt
>でしょ。

はて、なんか違ってるのかな?

>ところで、画面への出力とファイルへの出力を同時にやる方法は無いのかな?

あるけど?

599:名無し~3.EXE
08/04/06 18:07:00 wqKcgo9M
>>598
> はて、なんか違ってるのかな?
> あるけど?
無知蒙昧の煽り厨かよ。
役立つ情報を書けないんなら書くなヴォケ!

600:名無し~3.EXE
08/04/06 18:31:05 nlrXvzZ0
>>599 >>599

601:名無し~3.EXE
08/04/06 18:47:07 +PcLNC77
>>598
> あるけど?

どうやんの?

602:名無し~3.EXE
08/04/06 18:49:15 ejmUfes1
アフィニティマスクで1を指定して設定した場合シングルコアで作動しますが
これをデュアルコアで作動するように戻すには数値は何を入れれば良いのでしょうか?

603:名無し~3.EXE
08/04/06 18:52:10 ejmUfes1
すいません書き忘れてました
クアッドコアの数値もお願いします

604:名無し~3.EXE
08/04/06 18:55:56 nlrXvzZ0
>>601
>>uniq.bat file.txt>new.txt
>>でしょ。
>はて、なんか違ってるのかな?

のほうは?

605:名無し~3.EXE
08/04/06 18:58:08 +PcLNC77
>>604
単なる煽りなのか?

:error 以降の出力を得たいだけだったら別にfile.txtは要らんけどな。
そんな池沼レスする気だったの?

606:名無し~3.EXE
08/04/06 19:06:41 c2QC8Myi
最近2chで増えつつある、出し惜しみ厨の典型だな

607:名無し~3.EXE
08/04/06 19:10:36 +PcLNC77
出し惜しみどころか最初から知らないような気がしてきたよ。

やりたいことはmencoderの画面出力をそのままログファイルにも残したいってことなんだけど。
stdoutをそのままファイルにリダイレクトしてしまうとエンコード中の進行度が見れない。

608:名無し~3.EXE
08/04/06 19:12:59 nlrXvzZ0
ぷっ

609:名無し~3.EXE
08/04/06 19:25:04 c2QC8Myi
>>607
tee.exe T 字型二股ソケット でググれば、たぶんできると思う。
が、俺はやったこと無いが興味はあるので、成功したら、やりかたと結果を書いてくれ

610:名無し~3.EXE
08/04/06 19:35:33 +PcLNC77
>>609
ありがとう。

あんまり使ってないけどcygwinは入れてたんだった。数種類のコマンドしか使ったこと無かったから
存在を知らんかったorz
tee.exe あったよw

611:名無し~3.EXE
08/04/06 19:51:04 +PcLNC77
>>609
mencoder 色々オプション | tee -a log.txt

これで画面出力と同じものをファイルにゲットできた。
厳密にはちょっと違うけど、それは元々わかってた問題だからOK。

どこかの口だけさんと違って感謝!

612:名無し~3.EXE
08/04/06 19:58:49 nlrXvzZ0
teeでなくてもできるけどw

613:名無し~3.EXE
08/04/06 20:22:49 +PcLNC77
もうこっちのやりたいことは終わったからレス不要

614:名無し~3.EXE
08/04/06 22:12:32 MGkgFDSO
どなたか>>602-603をお願いします

615:名無し~3.EXE
08/04/06 22:17:42 MGkgFDSO
すいませんよそ聞きます
失礼しました

616:名無し~3.EXE
08/04/12 14:20:05 psbvetMj
cygwin使わずにできんのか

617:名無し~3.EXE
08/04/12 21:34:37 8rjR8tpP
動画をバッチ処理したいのですが
解像度かアスペクト比で処理を分岐させたい場合
どのように書けばよいでしょうか?


618:名無し~3.EXE
08/04/12 21:55:12 frEZV/rR
if

619:617
08/04/12 22:10:27 8rjR8tpP
>>618
もう少し具体的な回答をお願いします。
例えば解像度が1280x720の場合
echo LanczosResize(428,320)>> %avsfile%
解像度が960x720の場合
echo LanczosResize(480,270)>> %avsfile%
と処理を分岐させたい時
どのように書けばよいでしょうか?

620:名無し~3.EXE
08/04/12 22:14:42 bsDmcclx
具体的にって言われても動画の解像度なんて映画館によってまちまちだろ?

621:名無し~3.EXE
08/04/12 22:16:01 6vn8GrIL
動画の解像度情報とかバッチファイル中でどうやって取得する気かと小一時間(ry
いやもしそういったツールがあるなら俺も是非欲しいが

622:名無し~3.EXE
08/04/12 22:40:15 8rjR8tpP
>>621
クリップボードに解像度情報などを送るソフトはあります。
URLリンク(kurohane.net)
にある真空波動研SuperLite
です。
2行目に解像度などがクリップボードに送られるので
それを分岐処理に使いたいです。

623:名無し~3.EXE
08/04/12 22:47:17 bsDmcclx
クリップボードの解像度情報とかバッチファイル中でどうやって取得する気かと小一時間(ry
いやもしそういったツールがあるなら俺も是非欲しいが


624:名無し~3.EXE
08/04/12 22:58:29 L9AzdWZJ
クリップボードに解像度情報が入ってれば
cliputilなり何なりを経由してforででも
行解析すれば取得は可能じゃない?

真空波動研は使ってないからコマンドラインから
操作できるか知らないけど。

625:617
08/04/12 23:09:06 8rjR8tpP
>>624
真空波動研はコマンドラインから使えるのですが
行解析はどのように行えばよいでしょうか?
クリップボードには
[cap20071129090938.avi]
1920x1080 24Bit Motion JPEG(MJPG) 29.97fps 53943f 124553.95kb/s
PCM 48.00kHz 16Bit 2ch 1536.00kb/s
[RIFF(AVI2.0)] 00:29:59.898 (1799.898sec) / 28,368,765,952Bytes

真空波動研SuperLite 080308 / DLL 080308
のようなデータが送られるので
1920/1080が1.7より大きいか小さいかで分岐処理を書きたいのですが
どのように書けばよいでしょうか?

626:名無し~3.EXE
08/04/12 23:53:40 ma+dusF0
面倒くせーからクリップボードの内容をテキストに出力して
そこから必要行を抜き出して分岐判断させれ

627:617
08/04/13 00:16:33 pAruhQL3
>>626
625のように2行目に
1920x1080 24Bit Motion JPEG(MJPG) 29.97fps 53943f 124553.95kb/s
と書かれたテキストファイルから1920/1080の計算結果を得るには
どのように書けばよいのでしょうか?


628:名無し~3.EXE
08/04/13 00:42:52 2Fn25r/4
for /?
find /?
findstr /?
if /?
set /?

辺りかな?

629:617
08/04/13 01:30:00 pAruhQL3
>>628
URLリンク(www.tsg.ne.jp)
にあるクリップボードのテキストをDOSで扱うためのツールを使って
for /f "skip=1 tokens=1,2 delims=x " %%A in ('C:\Plugin\cliputil.exe -paste') do
で1920と1080を取り出せそうなのですが
ここから先がわかりません。
どのように書けばよいでしょうか?

630:名無し~3.EXE
08/04/13 10:21:35 q3/8LHKx
typeでテキストを表示したアドレスをlynxにぶち込むにはどういう方法がありますか?

631:617
08/04/13 18:25:52 pAruhQL3
もうあきらめてPerlで処理しました。
perlに頼ると負けた気分になるけど
今日中には終わらせたかったので。

632:名無し~3.EXE
08/04/13 19:43:28 QXIVF9vj
そういえば標準で数値計算に浮動小数点数使えるコマンドってあったっけ

633:名無し~3.EXE
08/04/13 20:40:16 U2MS+S2g
>>631
つか、バッチでどうしてもやらざるを得ない理由がなければ、
Perlのほうが断然便利だよ。

バッチは、OSのVersionによって解釈の意味が変わったり、
コマンド直打ちとバッチ内で記述する書式が違っていたりと、
とにかくクセがありすぎる。

パズルを組み立てて楽しむ程度の心の余裕がないとムリ。
即効性と実用度で言えばPerlが断然勝利。

さいごに、参考にPerlで解決した方法を書いてもらえれば、
スレ的に有益になるだろう。

634:名無し~3.EXE
08/04/13 21:19:04 bRCjXHsW
連番数字を作るとき数字なら開始終わりSETPが使えるので(1.1.100)とかで
簡単に作れますよね、これを
アルファベットで連文字作りたいときはどうやったらいいでしょう
aaaaaa~zzzzz
シロートがリファレンス読んで何とか2文字バージョンまでは作ったけど

FOR %i IN (a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z) DO @(FOR %j IN (a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z) DO @echo %i%j)

1)6文字バジョーンはどうやったらいいでしょうか?
2)それと実際に使うとは全出力ではなくbaaaaa~czzzzzまで出力とかしたいので
フレキシブルな出力変更可能なやり方で

1)2)を満たすもの。でも2)が困難だったら1)だけでも
どなたかお願いします


635:631
08/04/14 01:48:28 OkNafE+v
>>633
じゃぁ解決した方法だけをば
バッチ処理でfileリストと真空波動研の結果リストをファイルに保存
perlに処理を移して626さんのとおりの処理をさせて
エンコバッチファイルをperlに書き出させてそれをcall
以上です。

636:名無し~3.EXE
08/04/22 11:20:21 /OOwZtgR
コマンドラインから、net use コマンドを使うことなく(ドライブ文字を割り当てないで)
ファイルをコピーしたいのですが、可能でしょうか?

エクスプローラからの操作であれば、\\10. 1. 2. 30\ のように入力してUSER/PASSWORDを
入力すれば、ドライブレターを使うことなくファイルがコピーできますが、この操作がしたいのです。


637:名無し~3.EXE
08/04/22 11:27:10 Zu/QpkUZ
net use で必ずドライブに割り当てないといけないわけじゃないよ。

net use \\host\path PASSWORD /user:USERNAME
copy ほげほげ
net use \\host\path /delete

とか。

638:636
08/04/22 11:46:48 fvGqunE0
>>637
即レスありがとうございます。
ドライブ名無しで試してエラーが出たので、net use はダメかと思っていたのですが、
レス通りだとできました。自分で試した構文が間違っていたようです。ありがとうございました!


639:名無し~3.EXE
08/04/23 14:50:16 P+H+JVhc
Ctrl+Cキーで中断したバッチ処理を再開するにはどうしたらいいのでしょうか?
また、中断されている処理があるかどうか確認する事は出来ますか?

よろしくお願いします。

640:名無し~3.EXE
08/04/23 15:11:36 aJ9ihgZR
バッチ ジョブを終了しますか (Y/N)?

641:名無し~3.EXE
08/04/23 23:38:12 wxDe1tZY
Y

642:名無し~3.EXE
08/04/24 01:46:00 PjPeKbCJ
YES! YES! YES!

643:名無し~3.EXE
08/04/24 02:25:29 /KwaoZJn
How many files (0-15) ?

644:639
08/04/24 08:29:44 OFIsBZW/
>>640-642
ありがとうございます。 教えて頂いた通りに「Y」を押すことで無事終了することが出来ました !

いあ…すみません 中断してたのはバッチじゃなかったです…
もう少し調べてくるっス


645:名無し~3.EXE
08/04/24 20:31:24 s1mKrdXj
ちょ

646:名無し~3.EXE
08/04/26 06:53:32 S2f4sNFX
byteをMBに変換するために変数で割り算やってます
試しにこんな感じで事前の予備実験してみて上手くいったので
(わざと割り切れない数字でやってみた例)
@echo off
for /L %%k in (10485763,1048575,104857513) do (
set /a NN=%%k/1048576
echo=約!NN!MB
)
Pause

上と同じ set /a NN=%%k/1048576 を使って、コレをやってみたら
全然だめなんです。「32ビットなんたら」が出たり
エラーが出ないときは計算結果が間違ってたり
@echo off
for /F "tokens=1-3 delims= " %%i in ('fsutil volume diskfree c:') do (
set /a NN=%%k/1048576
echo=%%i%%j約!NN!MB
)
Pause

エラーメッセ-ジ"数値は 32 ビットで表記される数値です"
をGoogleで検索してもヒット無しで得られる情報ゼロ



647:名無し~3.EXE
08/04/26 09:16:13 +HXIEmBQ
32 ビットで表記される数値とは、-2,147,483,648 から +2,147,483,647 までの値の符号付き整数を表します。

648:名無し~3.EXE
08/04/26 10:13:23 noTmo+SZ
>>646
for ... ( ... )
って書き方は有効なのかな?


649:名無し~3.EXE
08/04/26 10:30:49 noTmo+SZ
ああ、ごめんなさい、偉そうな書き方したけど間違った理解をしてました。
( ) のブロック内での変数の扱われ方ですね。
if 1==1 (
 set xxx=hoge
 echo %xxx%
)
のようなとき、%xxx%はブロックに入る前の値しか参照できないようですね。

で646をよくみたら… ほんとにそれ動いたのって感じですね…

650:名無し~3.EXE
08/04/26 10:50:19 +HXIEmBQ
>>648-649
何いってんだ? cmd /? からやり直せ。

651:名無し~3.EXE
08/04/26 11:05:58 noTmo+SZ
>>650
すんません、理解しました。。。
set hoge=aaa && echo %hoge%
みたいなのが思った通りに動いてくれなかったのもこれなんだなぁ

652:646
08/04/26 12:00:02 dIylg/Sf
>>647
どうも。直し方が分からないし変な横槍入ってめんどくさいので割り算は諦めて
バイト値の下6桁を削って簡易表示でやることにしました
約!NN:~0,-7!MB
でわみなさんgood-by

653:名無し~3.EXE
08/04/27 01:37:19 xz87xW1t
if文の中にechoを入れたいのですが、そのecho文中に () があるとそれをifの
グループ化機能と誤認して構文エラーになってしまいます。
echo文全体を () や '' で括ったり、( と ) の前にそれぞれ^を加えてもダメでした。
何か手はありませんか?

654:名無し~3.EXE
08/04/27 09:29:55 Svy4QoHk
>>653
括弧の前に ^ をおいてエスケープ

655:名無し~3.EXE
08/04/27 10:00:16 0TiqPju+
シングルで囲むとどーなるか

656:名無し~3.EXE
08/04/27 11:09:18 eQlwkWfL
>>655
自分で試せよ。

657:名無し~3.EXE
08/04/27 16:34:30 xz87xW1t
>>654
ありがとうございます、( ) がechoの文中で完結してる場合は必要ないけれども
複数のコマンドにまたがるようにして ( ) が使われてる場合 ^ が必要みたいですね。
ところでif文中のechoは表示できる文字数に制限があるみたいで(半角英数120文字程度?)
そのechoの内容をファイルにリダイレクトしようとしても途中までしか書き込めませんでした。
今回に限って言えば、if文からgotoで抜け出し、そっちにechoを書いて
リダイレクトする判断は結果としては正しかったようです ^ ^;

658:名無し~3.EXE
08/04/27 18:58:17 ec2ADBWt
>>657
> ところでif文中のechoは表示できる文字数に制限があるみたいで(半角英数120文字程度?)

@echo off
if 1==1 (
echo aaa
echo bbb
echo (ccc^)
echo ddd
) else (
echo eee
)
if 1==1 (
echo fff
echo 12345678911234567892…中略300文字…1234567890
echo 12345678911234567892…中略300文字…1234567890> tmp.txt
)

全く問題なし。

659:名無し~3.EXE
08/05/10 00:41:56 jOW3pjRB
batの引数について質問です。

---test.bat---
if "%1"=="" goto Error
set var=%1
echo %var%
perl aaa.pl %1
goto End
:Error
echo 引数を入れて下さい...
:End
echo 終了します...
---終わり---

の内容な.batを書いたんですが、これを > test.bat 01 02
として実行させると、perl aaa.pl には "01"のみ引数として渡されます。(ここまではわかります。)
で、実はこの aaa.pl に複数の引数(場合によっては10個以上)を渡したいです。(しかも実行するごとに引数の内容が変わります)

そこで、
> test.bat "01 02" として実行させると、’02""=="" の使い方が誤っています。’と怒られます。
> test.bat "01 aa bb" とすると、’aa の使い方が・・・’とやはり怒られて、実行できません。
これは、if "%1"=="" の部分で、%1が展開されて if ""01 02""=="" goto・・・ と、構文エラーになってしまうためかと思われます。

そこで、if %1=="" としてやると、一応ifの部分はパス出来ますが、perl aaa.pl "01 02"となってしまい、
aaa.pl側からは一つの引数として扱われます。(perl側からは、複数の引数として渡したい)
さらにこの場合だと、
> test.bat と引数なしで実行した場合は ’goto の使い方が誤っています。’ と言われてしまいます。
今度もやはり if %1=="" が、 if =="" goto・・・ と展開されてしまい、構文エラーになってしまいます。

660:659
08/05/10 00:42:27 jOW3pjRB
長くなってしまいましたが、まとめますと、

> test.bat "01 02 AA BB CC ・・・" (引数の数は可変。10個以上の場合もあり)
と、コマンドラインから実行して、
perl aaa.pl 01 02 AA BB CC ・・・ (.batの引数からダブルクオートを省いたものをそのまま.plに渡す)
とゆうことがしたいです。
さらに > test.bat と、引数なしで実行されてしまった場合は、:Errorのブロックを実行して警告を出力させたいです。

もうひとつついでに言いますと、
goto Errorで飛んだ先の :Errorブロックのみを実行させたいんですが、
上のスクリプトだと、その下の:Endブロックも実行されてしまい、
引数を入れて下さい...
終了します...
と出力されてしまいます。

:Endの前に exit を書き足すと、コマンドプロンプト自体が終了してしまいます。これもどうにかしたいです。

661:名無し~3.EXE
08/05/10 00:51:01 2oG4P/Du
perlが使えるなら、全部perlで処理したほうが効率的では?

バッチは、代替がない環境で仕方なく使うものだと俺は理解しているが

662:659,660
08/05/10 01:02:51 jOW3pjRB
>>661
ええ、実は目的の動作はPerlだけですでに出来上がってるんですが、ふとbatでやってみようと思って、
昨日一日かけて色々ググッてみたり、いくつかスクリプト書いたりしたんですが、
どうしても出来なくて、ヒジョーにクヤシイ!!って思った次第です。

で、こちらの達人方にご指導いただければと思いまして・・。

663:名無し~3.EXE
08/05/10 01:21:23 eXbatmiN
%*
goto :eof


664:660
08/05/10 01:56:15 jOW3pjRB
>>663
うおおお!!できました。
引数が100個あってもちゃんと渡せます。

感動しました。ありがとうございます。

665:名無し~3.EXE
08/05/16 22:13:06 k4qTlZ8j
フォルダの中を消すには、どうするとよいですか?
rd /s
だと、フォルダごと消える。
複数あるのでバッチ処理したいが、何かよい方法は無いですか?

666:名無し~3.EXE
08/05/16 22:19:39 V84Krwca
rd /s フォルダ\*

でどですか

667:名無し~3.EXE
08/05/17 07:37:18 Tfmv5vbb
rd /s /q フォルダ
md フォルダ

まぁタイムスタンプが変わってしまうけどな

668:名無し~3.EXE
08/05/17 17:15:03 948oFaXd
cd フォルダ
rd /s .

669:名無し~3.EXE
08/05/17 23:39:45 PBIKhabT
バッチファイルでプログラムに00 01 02 03 ・・・といった連番になっている引数をわたしたい。
普通にfor文でやると頭に0がつかないので複数のfor文を組み合わせて実行しています。
ただ桁数が増えるとforと変数が多くなってわかりにくくなってしまします。
もうすこしいい方法はないでしょうか?

670:名無し~3.EXE
08/05/18 00:15:50 9CUWfmLK
for /l

671:名無し~3.EXE
08/05/18 00:29:22 Ox8jPhTX
@echo off
setlocal enabledelayedexpansion
set args=
set temp=

for /L %%i in (0, 1, 12) do (
set temp=00000000%%i
set args=!args! !temp:~-4!
)

echo args=%args%
pause

672:名無し~3.EXE
08/05/18 00:45:56 Ox8jPhTX
temp はまずかった

673:名無し~3.EXE
08/05/18 01:37:13 sec9T0KN
for /L %%i in (0, 1, 9) do for /L %%j in (0, 1, 9) do (

674:名無し~3.EXE
08/05/18 01:43:47 FcpR8lz9
>>671
ありがとうございます。できました。
setと環境変数の勉強がたりなかったようなので勉強しなおそうと思います。

675:名無し~3.EXE
08/05/18 10:34:31 TvxyqS1+
質問です。お願いします。

作成した下のbatファイルをdos窓からコマンド入力して
正常動作は確認できたんですが

windows xp で ファイル右クリックから呼び出すように
(SendToに置いて呼び出す)するとif文が一切判断されず
そこで終了してしまいます。

実行時のDOSの種類が違うんでしょうか?

--
:start

コマンド処理 %1
shift

IF "%1"=="" GOTO :eof
goto start
--

676:名無し~3.EXE
08/05/18 10:55:34 paRoTs6C
%1 を %~1 にするとかじゃね?
どうでもいいけど、コマンドの大文字小文字は
統一したほうがいいよ

677:名無し~3.EXE
08/05/18 13:43:59 sec9T0KN
>>675
for %%1 IN (%*) DO コマンド処理 %%1

678:名無し~3.EXE
08/05/18 14:16:17 L+mLCnGS
shift したら %1 は無くなるだろ。

679:名無し~3.EXE
08/05/18 15:04:01 ku4xMzVb
>>676
質問者じゃないけど、この2つの違いって何ですか?

680:675
08/05/18 19:43:39 TvxyqS1+

>>677 の方法で処理できました。

if を大文字にしていたのは 試行錯誤の残骸で
shift の位置は確かに適切ではないですね

ありがとうございました >> all

681:名無し~3.EXE
08/05/18 20:49:26 a9xwvrWi
IF "%1"=="" GOTO :eof
goto start



set x=%1
IF not defined x GOTO :eof
goto start

682:名無し~3.EXE
08/05/19 08:20:58 nvSZDr4K
>>679
%~1は二重引用符「"」を取ったもの。

%1に「"abc"」という文字列が入っていた場合、

if "%1"=="" goto :eof → if ""abc""=="" goto :eof
""=="" なので常に goto :eof を実行。

683:名無し~3.EXE
08/05/19 13:26:33 EjVEkl8f
ちがうよ
if ""abc""=="" goto :eof

if ""abc""=="" echo true
ってやってみな

たぶん
if ""a c""=="" goto :eof
でエラーになってるんだろ

バッチファイルの関連付けを
cmd /k "%1" %*
に変えて実行結果を確認しろ


684:名無し~3.EXE
08/05/22 22:06:39 Vl7E04+C
スンマソン
バッチでIPアドレスの設定は可能でしょうか?
あとディスク使用量を出すコマンドはあるでしょうか?
よろしくです

685:名無し~3.EXE
08/05/23 07:17:56 PYuFRnph
>>684

netsh interface ip set address name="ローカル エリア接続" source=static addr=192.168.1.1 mask=255.255.255.0
netsh interface ip set address name="ローカル エリア接続" gateway=192.168.1.254 gwmetric=0
netsh interface ip set dns name="ローカル エリア接続" source=static addr=192.168.1.253 register=PRIMARY


686:名無し~3.EXE
08/05/23 10:07:11 ZLhGN8vH
fsutil volume diskfree c:
空きとドライブの全容量が出るからそこから逆算すれば。

687:名無し~3.EXE
08/05/23 19:00:56 HPZlYjUP
dir /s c:\

688:名無し~3.EXE
08/05/25 14:35:32 o3W/fKZ/
Accessのローカルのクライアントマシンに存在するmdbファイルを世代管理を使ってサーバーにバックアップを取る仕組みを考えております。
世代管理は例えば今日からで言えば20080525.mdb ~ 20080601.mdbまで一週間分保持するものとし6/2になれば5/25日のバックアップファイルは消され一番古いものが5/26日となります。
また同一日付でこのバッチが起動された場合は同じ日付のバックアップの保存先のmdbファイルが新しい方の日付で更新される仕組みを考えております。

これをどうしてもコマンドプロンプトのbatファイルにて作成したいのですが、ベテランの方ご教授していただけますか?

以前このような世代管理を行っていた方はいたのですが、現状その方に聞ける事情ではなくインターネットで調べてもうまいような検索結果がヒットしません。

どなたかご教授の程お願い致します。


689:名無し~3.EXE
08/05/25 14:59:19 QPVRGIlk
>>688
日付をつけるとややこしくなりそうだし、どうせ消すのなら

backup_mon.bat
copy xxxx.mdb backup_mon.mdb

みたいなのを1週間分つくって、
タスクマネージャで起動かけるとかじゃだめ?

これだと古いのは勝手に消えるし。



690:689
08/05/25 15:03:40 QPVRGIlk
× タスクマネージャ
○ タスクスケジューラ

orz


691:名無し~3.EXE
08/05/25 15:44:38 wEJGvu77
TXTファイルから各行の最後尾文字列だけ抽出するバッチファイル

1,2332,311133,444,555,66666,1行目成功
1,2,1111,33333333333333333,2行目成功
22444222,1111,333,444,5,6,7,3行目成功
以下略
最後尾が何番目のトークンかは不定
最後尾の前に並ぶ文字列に規則性無し

上のTXTファイルから
1行目成功
2行目成功
3行目成功
以下略
と取り出すもの
○行成功というは仮に書いてるだけでこの文字列にも規則性は無し

検索したらniftyのフォーラムで同様の質問している人がいたが解答に出会えないまま

このバッチファイルは考え方としてどんなものがあるでしょうか?
アイデアだけでも歓迎
ヒントをくれたらバッチファイルはしこしこ組みまする


692:名無し~3.EXE
08/05/25 16:21:12 zbkosXn7
一般的な方法じゃないけど、
各行の後ろの何文字かを取り出して、
,をスペースに変換して、
一番最後のワードを結果とするのはどうですかね。

693:名無し~3.EXE
08/05/25 18:25:46 k5O0hNsJ
for /f "delims=" %%L in (hoge.txt) do (
for %%I in (%%L) do set str=%%I
call echo %%str%%
)


694:名無し~3.EXE
08/05/25 18:42:07 wEJGvu77
>>693
出来ました<(_ _)>

695:名無し~3.EXE
08/05/26 12:03:03 2uqHEmAT
今更Windows2000なのですが、画面の解像度とかカラーモードをバッチで設定することは可能ですか?


696:名無し~3.EXE
08/05/26 13:45:51 SfOkgupv
コマンド1個だけじゃ無理だろうね。

いろいろ手順を踏めばできないこともないが、
適当な外部ツールを起動させるだけのバッチを作ったほうが手間的に得

697:名無し~3.EXE
08/05/26 13:56:06 NdJLY4Hf
>>695
URLリンク(www.vector.co.jp)

698:695
08/05/26 14:11:14 2uqHEmAT
即答ありがとうございます。>>697のツールを試してみることにします。


699:名無し~3.EXE
08/05/27 19:59:09 /w3vmy7X
コマンドプロンプトにおける、\"の挙動ってどうなっているのでしょうか?

"s/'//g" | more

という引数を渡すと "s/'//g" のみが引数として渡り
結果がページ毎に止まって出力されます。しかし

"s/'/\"/g" | more

という引数を渡すと "s/'/\"/g" と "|" と "more" の3つが引数として渡ってしまいます。
後者2つをそれぞれパイプ、moreとして扱って貰うにはどうしたら良いのでしょうか?

700:名無し~3.EXE
08/05/27 20:15:01 /w3vmy7X
ちなみに、いくつかのコマンドで試しましたが
どれもやはり | more が引数として取られてしまいました。

>gawk "BEGIN{ for(i in ARGV) print ARGV[i]; }" "s/'/\"/g" | more
gawk
s/'/"/g
|
more

>perl -e "print join' ',@ARGV" "s/'/\"/g" | more
s/'/"/g | more

>ruby -e "p ARGV" "s/'/\"/g" | more
["s/'/\"/g", "|", "more"]

701:名無し~3.EXE
08/05/27 22:24:26 24yESl2I


702:名無し~3.EXE
08/05/27 22:43:51 /w3vmy7X
エスケープは ^ でしたっけ。しかしそうすると今度は

>perl -e "print join',',@ARGV" "s/'/^"/g" | more
s/'/^/g | more

| more までが全て1つの引数として扱われてしまいました。

703:名無し~3.EXE
08/05/27 22:48:28 hncFSdKH
括弧は?

704:名無し~3.EXE
08/05/28 11:01:30 ae35Ovs8
cmdを起動する時に、詳細設定の環境変数を弄らずに
path %path%;c:\bin やdoskey等を打ち込んだ状態にしたいのですが、どうすればできますか?


705:名無し~3.EXE
08/05/28 13:49:11 PlLgl/L0
cmd起動用のバッチでも書け

706:名無し~3.EXE
08/05/28 14:16:28 lcT2TWdz
cmd /k "path %path%;c:\bin & doskey"

707:名無し~3.EXE
08/05/28 14:23:02 lcT2TWdz
\042
\x22

708:名無し~3.EXE
08/05/28 14:47:27 ae35Ovs8
>>706
ありがとうございます

709:名無し~3.EXE
08/05/28 21:52:55 bRtNuYLO
>703
こういうことでしょうか?
>( perl -e "print join',',@ARGV" "s/'/^"/g" ) | more
More?
More?
More?
More?

>( perl -e "print join',',@ARGV" "s/'/\"/g" ) | more
More?
More?
More?
More?

More? が終わりません…。

>707
>perl -e "print @ARGV" "\x22"\042"" | more
\x22\042

すみません、よく分からないです…。

どなたか、ダブルクォートを引数として渡して
パイプ以降はちゃんとパイプとして認識されるような書き方を知らないでしょうか…。

710:名無し~3.EXE
08/05/28 22:20:25 wRMFx7lg
バイナリファイルの先頭1MBだけコピーしたいのですが、
この用途に適したコマンドまたはツールはないでしょうか。

ファイルのハッシュを計算する際、フルにスキャンすると時間がかかるので、
個体認識さえできればよい、という前提で探していますが、
CUIツールは見つからず、ヘルプいただけると助かります。

711:名無し~3.EXE
08/05/29 01:18:04 JW1TfnJu
call :hoge > hoge
more hoge
del hoge
goto :eof
:hoge
perl -e "print join',',@ARGV" "s/'/^"/g"


712:名無し~3.EXE
08/05/29 02:05:00 EjL5v9Ji
ちょっと長くなりますがschtasksについて質問させてください。

テキストファイルをリモートサーバ上にコピーするバッチcollect.batと、
それをschtasksを使ってAdmin権限で実行するプレバッチについて。

配布して実行した結果、プレバッチ内のschtasks処理がされずに
失敗したものがほとんどで、成功したものは配布対象の1割程度
でした。バッチを作成した環境やテスト環境では成功していました。

プレバッチでは

set LOGFILE=D:\LOG\collect.log
echo [%TIME:~0,8% start] >> %LOGFILE%
schtasks /create /u:administrator /p:**** /tn collect
/tr D:\collect.bat /sc once /start %TIME:~0,5% >>%LOGFILE%

schtasks /run /tn collect >> %LOGFILE%
echo [%TIME:~0,8% end] >> %LOGFILE%

こんな感じにしていますが、なぜかschtasksコマンドの結果が
collect.logには何も残っていません。
プレバッチの実行はこのログからも確実にされていることが
分かっています。
Task Schedulerサービスは実行されていますが、サービス未起動
でもschtasksが返すメッセージが残るはずなので不思議です。
成功した環境と失敗した環境との違いも、今の所はわかりません。

環境はWindowsXP Pro SP2です。
schtasksが正常に実行されないのはなぜでしょうか?


713:名無し~3.EXE
08/05/29 11:03:38 kmN2kcgk
>>710
dd でいいんじゃないかな
URLリンク(genluck.blog78.fc2.com)
cygwinとかgnuwin32とかにもあると思う。

714:名無し~3.EXE
08/05/29 13:15:02 vznSjYc6
>>712
schtasksのエラーのメッセージは標準エラー出力に出るんじゃね?
schtasks ~ >> %LOGFILE% 2>&1

715:名無し~3.EXE
08/05/29 21:38:50 wqEdMWdF
>>713
ありがとうございます。おかげさまで、かなり高速で処理できました。
まさかWindows環境で、あの便利なDDが使えるとは・・・

/of にHDDのデバイス名を割り当てたら死んでしまうので、
バッチで作る際は、その点だけ要注意ですね。

716:名無し~3.EXE
08/05/30 20:58:00 fOxd9QQm
>711
う~ん、バッチファイルの話では無いのでこちらで聞いていたのですが

…とりあえず、色々考えてみます。ありがとうございました。

717:名無し~3.EXE
08/05/30 22:34:33 9ky/2+Nz
それより正規表現で>>707の意味を調べろよ

718:名無し~3.EXE
08/05/31 01:06:58 zEJ6JTHT
\ ただの文字
" 開始引用符は終了引用符までのすべての文字をただの文字として扱う
^ 引用符中でなければ次の文字が持っている機能をエスケープする
したがって s/'/^"/g となる。プログラムに "s/'/"/g" を渡したいのなら ^"s/'/^"/g^"
となる。
ただしプログラム側が " に対して特別な処理をしていてcmd.exeが渡した引数と異なる値
になるかもしれない。
VC++ 2003ではs/'/^"/gはプログラム側でGetCommandLine()するとs/'/"/gだったが、
argv[1]はs/'//gになった。
s/'/^"""/g|moreはGetCommandLine()ではs/'/"""/gとなりargv[1]はs/'/"/gになった。
コンパイラやプログラム側の処理でどうなるかはわからないが、たぶん正解は
s/'/^"""/g|more


719:名無し~3.EXE
08/05/31 12:55:23 LVZHNqTn
引数に空白とタブルクォートが両方入るならどうなる?

720:名無し~3.EXE
08/05/31 17:28:29 W5p9QjDe
このプログラム argecho.c をコンパイルして試してみた。
#include <stdio.h>
#include <string.h>
#include <windows.h>
int main(int argc,char **argv)
{
char *p;
int i;

p = GetCommandLine();
if ( p == NULL ) {
exit(1);
}
printf("GetCommandLine=[%s]\n",p);
for ( i = 0 ; i < argc ; i++ ) {
printf("argv[%d]=[%s]\n",i,argv[i]);
}
return 0;
}
>argecho s/" "'/\^"/g arg2 |more
GetCommandLine=[argecho s/" "'/\"/g arg2 ]
argv[0]=[argecho]
argv[1]=[s/ '/"/g]
argv[2]=[arg2]

>argecho \^"s/" "'/\^"/g\^" arg2 |more
GetCommandLine=[argecho \"s/" "'/\"/g\" arg2 ]
argv[0]=[argecho]
argv[1]=["s/ '/"/g"]
argv[2]=[arg2]
(VC++ 2003の)ランタイムルーチンがコマンドラインをargv[]に分解するときに \ は " をエスケープする意味があるのでこうなった。
フリーのコンパイラ(Visual C++ 2005 Express Edition, Borland C++ Compiler 5.5など)をインストールして追試してみてくれ。

721:名無し~3.EXE
08/05/31 22:11:49 Uj21DRlS
以前、似たような試験をしてみたところ、
Visual C++ 2005 Express Edition と MinGW の gcc は同じ結果で
Borland c++ 5.5 だけ結果が違ってた。
Windows では、コマンドラインを解釈するのはランタイムライブラリ。
コナパイラが変われば解釈も変わる。
同じ Visual C++ でも将来のバージョンで変わるかもしれない。
コンパイラに依存するような書き方をするのは不安だよね。
危ない橋をわたるより、もっと確実な方法を取ったほうがいいよ。

722:名無し~3.EXE
08/05/31 22:20:32 1exRLpNU
んじゃ、batの結果
@echo off
echo %%*=[%*]
echo %%0=[%0]
echo %%1=[%1]
echo %%2=[%2]

Vistaのcmd.exe

C:\>arg s/" "'/\^"/g arg2 |more
%*=[s/" "'/\"/g arg2]
%0=[arg]
%1=[s/" "'/\"/g arg2]
%2=[]


C:\>arg \^"s/" "'/\^"/g\^" arg2 |more
%*=[\"s/" "'/\"/g\" arg2]
%0=[arg]
%1=[\"s/"]
%2=["'/\"/g\" arg2]

723:名無し~3.EXE
08/05/31 22:36:47 1exRLpNU
ついでにVistaのcommand.com (dosonly)
とても素直です。

C:\>ARG s/" "'/\^"/g arg2 |more
%*=[*]
%0=[ARG]
%1=[s/"]
%2=["'/\^"/g]
%3=[arg2]

C:\>ARG \^"s/" "'/\^"/g\^" arg2 |more
%*=[*]
%0=[ARG]
%1=[\^"s/"]
%2=["'/\^"/g\^"]
%3=[arg2]

C:\>VER

MS-DOS Version 5.00.500

724:名無し~3.EXE
08/06/01 00:09:57 GAaQjz3F
色々ありがとうございました。
>718-723 の説明で完全に理解しました。
私の勘違いはどうやらいくつかあったようで

・\をcmdが処理していると思っていた
 (cmd的にはただの文字であり、アプリ側で処理していた)

・引用符は空白の入った引数を括るためのものだと思っていた
 (空白に限らず、"以外全ての文字をただの文字として扱わせるものだった)

・引用符は1つの引数全体を括るものだと思っていた
 (引数の途中から途中を括ることができる)

・引用符中であろうと ^ はエスケープとして機能するハズだと思っていた
 (引用符は空白を括るだけでなく ^ すらも文字列化してしまう)

>702 は""の中に ^ があった為、エスケープされず
次の"で引用符としての効果が終了、
/gの後が2つめの引用符の開始になってしまったのですね。

725:名無し~3.EXE
08/06/01 11:12:36 dypgy/G+
>723
>ついでにVistaのcommand.com (dosonly)
>とても素直です。
ナイーブなまんま。 日本に来て英語喋り続けるんだYO!

726:名無し~3.EXE
08/06/01 22:21:54 Sj5PJvNr
すんません
すごい低俗な質問なんですが

ren(rename)がうまくいきませぬ

たとえばデスクトップにあるテストって名前のフォルダの名称を変更する場合

C:\Documents and Settings\****\デスクトップ>ren テスト テスト1

こういうやり方をしてうまくいかないのは
やっぱりがおかしいんでしょうか○....rz



727:名無し~3.EXE
08/06/01 22:29:59 Sj5PJvNr
いえきっと

やっぱり頭がおかしいんだといいたかった・・・(´・ω・`)

728:名無し~3.EXE
08/06/01 23:30:35 qvFoSpKB
>>726
普通にできるが?

「テスト」内のファイルを使用中にリネームしようとしてるんじゃないの?

729:名無し~3.EXE
08/06/01 23:40:24 Sj5PJvNr
>>728
いえ開いてなんていないですが・・
これであってるんですか

同見ても無反応・・・

730:名無し~3.EXE
08/06/01 23:41:55 Sj5PJvNr
すません途中送信してしまたorz

>>728
いえ開いてなんていないですが・・
これであってるんですか

同見ても無反応・・・

で、renってファイルがデスクトップに作成されちまいやす

731:名無し~3.EXE
08/06/01 23:58:36 3OfuHUqF
>>730
まさか「デスクトップ>ren テスト テスト1」を打ってる?
デスクトップにcdして、それから「ren テスト テスト1」だぞ

732:名無し~3.EXE
08/06/02 00:04:46 D3dgcEjP
C:\Documents and Settings\****\デスクトップ>
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
    ↑これは「プロンプト」と言って、入力しなくていい。

ren テスト テスト1
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
    ↑あなたが入力するのは、コレ!

つまり、
C:\Documents and Settings\****\デスクトップ>ren テスト テスト1
                              ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ここだけ入力するとこ

733:名無し~3.EXE
08/06/02 00:06:34 Sj5PJvNr
>>731

cd<C:\Documents and Settings\Akihiko\デスクトップ
ren テスト テスト1

こういうことでしたか無知ですいません
ググりまくったんですが
どこ見てもコマンドの説明とかあるんですが構成とかまったくなくて○..rz

ばかですいまそん

ほんとはファイルの名前だけ入れ替えとかやりたかったんですが
これだけのことにこんな手間取るなんて・・・

諦めて半年くらいROMってきます
ありがとうorz

734:733
08/06/02 00:08:33 Cid0TIPt
>>732
ouch!

レスがついてる!
親切にありがとう

一番大事なとこが抜けてたんですね
バッチファイルが作りたかったんですorz

ほんと素人すぎてすいまでした

735:名無し~3.EXE
08/06/02 00:14:22 Cid0TIPt
すいまでした→すいませんでした

頭がパンクしました○rz

736:名無し~3.EXE
08/06/02 00:30:58 1WXTzPCh
ちったあ推敲してから書き込め

737:名無し~3.EXE
08/06/02 13:54:20 3tN2UbSe
睡魔だったんだろ?解るよ。

738:名無し~3.EXE
08/06/02 17:53:55 /+k/rMka BE:666238638-2BP(802)
オリンピックも近い事ですしね…

739:名無し~3.EXE
08/06/03 18:08:38 7j2Uu5Ce
URLリンク(ossan.fam.cx)

740:名無し~3.EXE
08/06/04 15:09:56 E/mtZnYt
100個位のバッチを4個づつ走らせる方法を教えてください
具体的にいうと、XP homeでstartからのバッチでシングルスレッドのx264(とavisynth)を
よっつ同時起動して1つ終了するたびに1つ起動するようにしたいです
イメージとしては
start /min 000.bat
start /min 001.bat
start /min 002.bat
start /min 003.bat
:ここで条件判定
start /min 004.bat
:ここでも条件判定
start /min 005.bat
:ここでも...
start /min 006.bat
...
みたいな感じでやりたいです

/wait付けて4分割で良さそうですが、それぞれ計算量(計算時間?)は違うはずなので非効率的です
個々のバッチの最後に条件判定の種を仕込む方法もあると思いますが、もちろん同時に終了する可能性もあるので、それぞれのバッチでうまく同期?する必要が有ります
その辺も考慮した方法をお願いします。

741:名無し~3.EXE
08/06/04 15:16:49 MFKCUv/N
モレはふつーに、100行あったら、25行づつ4枚のBATファイル書いてるけど。
特に問題無いよ。

742:名無し~3.EXE
08/06/04 15:26:33 E/mtZnYt
オレも今まではそうだったんだけど、もっと賢くできないかなぁ?とか思ったけど
オレに出来る範囲だとomp使ってexe作る位しか思いつかなかったから、試しに聞いてみた

どうぞよろしく~

743:名無し~3.EXE
08/06/04 15:30:47 znlAZcWV
WSHでExec使えばえーがな

744:名無し~3.EXE
08/06/04 15:41:12 E/mtZnYt
>>743
正規表現がどうかしたの?とかおもったけどww
調べてみたら割と簡単に出来そうで助かりました
ありがとうございましたノシ

745:名無し~3.EXE
08/06/04 15:46:52 E/mtZnYt
訂正
X ありがとうございましたノシ
O ありがとうございましたm(_ _)m

746:名無し~3.EXE
08/06/04 16:03:08 mGvFQhiJ
>>742
BATじゃなくて、AutoHotkeyやwshを使ったほうが確実だよ。起動したバッチの
PIDを監視して、それが消滅したら次のタスクへ、なんてのも数行でできる。

AutoHotkeyの例
Loop,100
 {
 cmd=やりたいこと%A_Index%.bat
 runwait %cmd%,,Hide,pid
 if errorlevel<>0
  msgbox,エラーでたよ。PID=%pid% errorlevel=%errorlevel% つづけたいならOK押せ
 }

「A_Index」は、ループ内で回った回数のこと。ループのたびに数値が1ずつ
上がっていくから、やりたいこと1.bat→やりたいこと2.bat→やりたいこと3.bat
・・・やりたいこと100.bat→END

と、順番に処理してくれる。
hideは、ウインドウを一切表示させない意味。pidは実行した際のpidが入る。
実行後、errorlevelが0以外なら、なんらかのエラーが出てるはずだから
そのときだけbeepを鳴らしたり、ダイアログを出すとかも可能。
エンコ用途なら、ダイアログを10秒以上放置したら自動で次の処理とかもできる。

このスレでも何度か出てるけど、いまどきBATをつかうのは
単独で起動させるプログラムにオプションを与えるための整理役と、
緊急時や、社内ポリシーの制限で「仕方なく」使うようなもの。

わかりにくくて制限だらけのBATをパズルのように使いこなすよりも、
もっと簡単に操作可能な方法を組み合わせたほうが効率的だよ。

747:名無し~3.EXE
08/06/04 17:57:35 B4CJCE84
んなアホな。それだったら
「質問された事をコマンドライン以外でやろうとしたらどうなるか?」スレになってしまう

ここは「それでも時代遅れのコマンドラインでなんとかやろうとしたらどうなるか?」と追求したり、それを質問をするスレだわ
コマンドラインが時代遅れである事は聞いてる人の側でもむしろ前提
746方式だと、これから誰かが何か聞いてくるたびに、質問されても無い別のスクリプトを教えるつもりなのか?
お勉強発表会は否定しないがその該当スレでやるか?ソフ板の総合質問系のスレでやるヨロシ


748:名無し~3.EXE
08/06/04 18:18:50 mGvFQhiJ
>>747
あーごめん。言葉足らずだった。

質問者が
>mp使ってexe作る位しか思いつかなかったから

ということだから、質問者のやりたいことだけを手っ取り早く
実現するなら、全部バッチでやるよりも簡単な方法があるよ、という話

749:名無し~3.EXE
08/06/04 21:49:55 7+YNsR+N
すいません。教えて下さい。

ファイルをD&Dしたときにそれをコピーしてある名前にする
っていう単純なバッチが作りたいんですが
全角スペースを含む日本語ファイル名だとうまく動きません
いい解決方法ないでしょうか

@echo off
cd /d "%~dp0"

copy "%~1" temp.txt

echo Finish.
pause

750:名無し~3.EXE
08/06/04 22:09:00 iEWLl5O8
>>749
>>488-495

751:名無し~3.EXE
08/06/05 09:36:57 lU41qR+3
>>750
ありがとうございました
いろいろぐぐったんですがいい方法も見つからなかったので
スペースは手作業で消すことにします

752:名無し~3.EXE
08/06/05 09:50:21 wBw/Rao8
set x=%2
if defined x (copy "%*" temp.txt) else copy %1 temp.txt

753:名無し~3.EXE
08/06/05 10:27:50 lU41qR+3
>>752
あーなるほど
分離してしまうならつなげろってことですか
気付きませんでしたorz
ありがとうございました

754:名無し~3.EXE
08/06/05 18:41:34 wBw/Rao8
>>740
set /a n=0
for /f "delims=" %%I in (list.txt) do call :run %%I
goto :eof

:run
for /f "skip=3 delims=" %%J in ('dir /b executing.*') do (
sleep 5
goto :run
)
set /a n+=1
type nul >executing.%n%
start cmd /c " %1 & del executing.%n%"
goto :eof


755:名無し~3.EXE
08/06/05 22:03:49 pkF1J8Bp
毎日、画像を三十枚以上、縮小&リネームしています。
手作業はしんどいので、自動化しようと思いここにたどり着きました。
リネームはDOSプロンプトで出来ることが分かりました。
画像はWindows標準のPaintで縮小していましたが、DOSで同様の処理が出来ますでしょうか?
ただし、他のソフトをインストールできない環境です。標準のソフトとofficeしか入っていません。


756:名無し~3.EXE
08/06/05 23:52:02 BS+WRxse
>>755
imagemagick使う。

インストールできないというのが実行ファイルを外部から持ってくるのも不可という場合は不可能と言うべきか?

厳密には不可能じゃないけど…

757:名無し~3.EXE
08/06/05 23:52:10 2RA2pd/j
質問スレで反応がなかったのでこちらで質問させてください。補足ですが、XP PS3です。

660 名無し~3.EXE sage 2008/05/29(木) 20:36:57 ID:0+d669Zv
    net sendコマンドとmsgコマンドは何が違うのでしょうか?
    Messenger serviceを有効にしてnet sendは機能
    するのですが、msgコマンドは/server:で対象を指定しても
    "エラー [5]:アクセスが拒否されました。"となってしまいます。
    対象を*にするとローカルには表示されます。

758:755
08/06/06 05:15:08 eZBPSYq8
>>756
imagemagickは外部から持ってくることになるため、避けたいです。
厳密には不可能でないという方法をアドバイス頂けないでしょうか?


759:名無し~3.EXE
08/06/06 12:52:46 TZUSZeSd
WSH使え

760:名無し~3.EXE
08/06/06 18:20:54 b+c7iV0l
>>755
バイト雇え

761:名無し~3.EXE
08/06/07 08:17:30 9kLf9UVX
ディスクの空き容量によって、処理(制御)の流れを変えるバッチファイルを
作りたいのですが、環境変数に空きディスク容量(ファイルのデータ)を
セットする方法が分かりません。
今考えている手順は、
dirの出力をファイルに落として、空き容量の文字列を抽出し、
それを環境変数にセットしてIF文で判定するというものです。

ちなみに、空き容量文字列の抽出は、
別のScript言語で作るしかないのでしょうか?

よろしくお願います。


762:名無し~3.EXE
08/06/07 08:17:58 9kLf9UVX
ディスクの空き容量によって、処理(制御)の流れを変えるバッチファイルを
作りたいのですが、環境変数に空きディスク容量(ファイルのデータ)を
セットする方法が分かりません。
今考えている手順は、
dirの出力をファイルに落として、空き容量の文字列を抽出し、
それを環境変数にセットしてIF文で判定するというものです。

ちなみに、空き容量文字列の抽出は、
別のScript言語で作るしかないのでしょうか?

よろしくお願いします。


763:名無し~3.EXE
08/06/07 13:40:11 Ep8IequY
>dirの出力をファイルに落として
for /f使え
詳しくはfor/?

>空き容量文字列の抽出は
findかfindstr使え
詳しくはfind/?かfindstr/?


764:762
08/06/07 14:41:58 9kLf9UVX
>>763
レスありがとうございます。
制御変数へのセット(IF文での判定)はどうすれば良いのでしょうか?
ここが一番悩みなんですが・・・



765:名無し~3.EXE
08/06/07 14:50:39 6Y503noJ
あるプログラムを互換モードで動作させる場合、エクスプローラからそのプログラムを
右クリックして、プロパティから互換性タブを開いて設定すると思います。

この作業をコマンドラインから行いたいのですが、どなたか方法をご存知ありませんか。


766:名無し~3.EXE
08/06/07 16:51:57 Ep8IequY
>制御変数へのセット(IF文での判定)はどうすれば良いのでしょうか?
for /f使え
詳しくはfor/?

767:名無し~3.EXE
08/06/07 18:08:56 616T7vii
>>766
部外者だが、知ってるなら具体的に**オプション使えばできる、とか書いてよ。
そんなオウム返しみたいなレス、スレが汚れるだけだからいらんよ

768:名無し~3.EXE
08/06/07 18:22:09 EguiI6zR
答え: /f

769:762
08/06/07 21:23:09 9kLf9UVX
>>766、767、768
レスありがとうございます。
for /fしか、ないということですね。

770:名無し~3.EXE
08/06/07 22:56:00 Ep8IequY
サンプルコード欲しければ、
スレリンク(win板)
で^Fしてfor /fを検索すればいくらでも見つかるよ

771:762
08/06/08 11:22:44 1NIPO+wf
for /fは分かったのですが、数値比較がうまくいきません。
if文で、数字が小さいと正しく比較されますが、
数字が大きくなると正しく比較されません。

例えば 1000 leq 800は、偽ですが、
100000000000 leq 80000000000は、真になります。
どうすれば良いのでしょうか?


772:名無し~3.EXE
08/06/08 11:26:09 yG6GqC1B
桁削れ
set /?

773:762
08/06/08 14:02:03 1NIPO+wf
>>772
レスありがとうございます。
なんとか出来ましたm(_ _)m

774:名無し~3.EXE
08/06/08 19:37:43 kTIPTXhe
setで=を置換できない?
set a=b=c
echo %a:==d%
==d%
の使い方が誤っています。
echo %a:^==d%
b=c


775:名無し~3.EXE
08/06/08 22:08:48 /UhiE58u
>>774
ちゃんとできてるじゃないの。何が問題なの?

776:名無し~3.EXE
08/06/08 23:25:48 xSF5tFgW
置換出来てるようには見えないがww
774がaの値がb=cとか錯覚しやすい変な例を上げてるせいだが
set a==

echo %a:==置%
echo %a:^==置%
どのやりかたでもダメだったと言いたいのだと思う

答えはシラネw

777:名無し~3.EXE
08/06/09 01:25:45 ChRGygE7
>>755
画像をUSBメモリで持ち帰ってフォトショップのマクロでやる
exeの持ち込みはダメなのにbatはいいってのがよくわからん管理状況だな
せめてOfficeとか入ってないの?VBA使えばそれこそなんでもできるよ

778:名無し~3.EXE
08/06/09 01:29:52 2VVefUuT
>>777
よく嫁
> 標準のソフトとofficeしか入っていません。


779:名無し~3.EXE
08/06/09 03:03:11 ChRGygE7
すまん。素で読み落としてたわ。

780:名無し~3.EXE
08/06/13 08:48:10 jt91+Q1n
バッチ処理(~.bat)をログオン時起動するように、
設定したのですが、うまく実行されません。
OSはVistaで、タスクスケジューラで状態を見ますと、
「起動中」になっていますが、
バッチ処理の中で、処理が始まると表示するように
記述しているechoメッセージが表示されません。

原因と対策を教えて下さい。
よろしくお願いします。


781:名無し~3.EXE
08/06/13 11:21:22 z034p4t+
ログオン時起動するように設定した方法とechoメッセージまでのバッチの内容は?

782:780
08/06/13 19:38:13 jt91+Q1n
>>781
レスありがとうございます。

設定等は以下の通りです。よろしくお願いします。


1.タスクスケジューラの

[全般]→[ユーザがログオンしているかどうかにかかわらず実行する]
    をチェック
[トリガ]→[タスクの開始]を[ログオン時]
    →[特定のユーザ/グループ]をチェック
[操作]→[プログラムの開始]
    バッチファイルのパス名、ファイル名指定

2.バッチファイルの内容は

@echo off
echo テスト
  :

です。

あと、関係があるかどうか分かりませんが、
[コントロールパネル]の[タスクのスケジュール]の盾マークがついてます。

783:名無し~3.EXE
08/06/13 21:55:16 eSs07QtP
一瞬で終わってるから気づかないだけとかいうオチはないよね

784:名無し~3.EXE
08/06/14 14:16:39 2LQf8VmF
MB温度、CPU温度、HDD温度をコマンドラインで取得したいです。
Wmic.exeというのが使えそうなのですが、使い方がいまいち分かりません。
わかるから、教えてください。

785:780
08/06/14 17:07:22 pWOjAg5F
>>783
レスありがとうございます。

「echo テスト」の次をpauseにしてますので、
気づかないうちに終わったということはありません。

786:名無し~3.EXE
08/06/14 19:12:47 gykffnVR
>>785
そもそもログイン前に実行したコマンドラインの内容って
ログイン後に表示されるの?

出かけてるから試せないけど、ファイルつくるようなバッチだったら
どんな動きしてる?

787:786
08/06/14 19:15:56 HScNwkhv
ログイン前、じゃなくってデスクトップ表示前、ですねorz


788:名無し~3.EXE
08/06/14 20:43:48 ZCY+j6Iz
うごいてるのか、
うごいてないのか。
うごいてるのに目に見えないだけなのか。
問題の切り分けをしろ。

ECHO %DATE% %TIME% うんこヤロー>>UNKO.log

789:名無し~3.EXE
08/06/14 22:05:03 HQrnnlE5
>>780
>「起動中」になっていますが、

の原因は

>「echo テスト」の次をpauseにしてますので、


790:780
08/06/15 16:48:01 HulyKHru
レスありがとうございます。

ECHO %DATE% %TIME% うんこヤロー >>…を
echo テストの前に入れてみましたが、
ファイルには何も書かれていません。

要求時に実行をチェックして、[操作]→[実行]すると、
タスクスケジューラの状態は実行中に変わりますが、
やはり、ファイルには何も書かれていません。

よろしくお願いします。






791:名無し~3.EXE
08/06/15 17:48:49 Wz6x2KJY
>>790
そもそも、そのバッチをコマンドラインで実行したら、どうなる?

792:名無し~3.EXE
08/06/15 19:23:45 JgbyKUVJ
「ファイルには何も書かれていません」ってのが本当かどうか怪しいな。
出力先に、ちゃんと絶対パスとドライブ名は入れてる?

書けないと言っておきながら、tempディレクトリとかに
しっかり書き込まれて、気づかない事例はよくある

793:790
08/06/16 16:12:54 jtToNX4P
>>791,792
レスありがとうございます。

コマンドラインで実行しても、バッチファイルをダブルクリックしても
正しく実行されます(ファイルに日付等が出力され、次のechoコマンドの
メッセージが表示され、「続行するには何かキーを押してください・・・」
が表示されます(pause))。

echo、pauseコマンドが処理されているのにメッセージ表示等が
正しく行われていないのか、そもそも処理されていないのかを
切り分けるためにファイル出力コマンドを入れています。

ファイルに書き込まれていることに気付かないだけで、
ファイル出力コマンドの処理が正常に行われていて、
次の「echo テスト」「pause」コマンドが正しく処理されない
というのは考えにくいのではないでしょうか。

ちなみに、タスクスケジューラでのバッチファイルのパス指定は
次のようになっていますが、問題はないでしょうか

C:Users\アカウント名\バッチファイル名





794:名無し~3.EXE
08/06/16 16:41:46 qoH3tLVW
なんで相対パス……

795:名無し~3.EXE
08/06/16 21:06:26 TXDKiHGf
どこが相対パス?

796:名無し~3.EXE
08/06/16 21:15:01 dK6gjggp
>>793
Vistaで実行してるようですけど
リダイレクト先はどこにしてますか?

権限をどう設定してるか分からないけど
C:\Users以下はUACの影響を受けたはずなので
その位置に書かれるか保証できないかも

Dドライブあたりにディレクトリ切ってみて
そこで試してみたらどんな結果になります?


797:796
08/06/16 22:40:05 dK6gjggp
>>790
せっかくなので試してみました。(Vista-Ultimate x64)

こんなバッチをタスクスケジューラに登録。

echo | cd >> D:\test\aa.txt
echo %date% %time% >> test.txt
echo %date% %time% >> C:\Users\AcctName\test.txt
echo %date% %time% >> D:\test\test.txt

Dドライブにtestディレクトリを切って再ログイン。

C:\Users\AcctName\ にはファイルは見あたらず
D:\test内のほうは
 C:\Windows\system32
 2008/06/16 22:24:59.01
の2行が生成。

別ディレクトリを絶対パス指定しないとダメですね。
(C:\Windows\system32にもファイルなし)
それからログイン時のタスクで実行したタスクは
ログイン後のデスクトップ上に表示されない模様。
Pauseは意味ないみたい。


798:名無し~3.EXE
08/06/17 02:07:19 zYoM/dJA
相対パス

799:790
08/06/17 13:58:01 zwWahSzn
>>797
レスありがとうございます。

ファイルが作成されない原因は分かりました。
ところで、本来やりたい「デスクトップへechoメッセージを
表示してpauseで待つ」という処理が、
ログイン時タスクで出来ないとすると、どうすれば良いのでしょうか?
ログイン直後に自動起動してデスクトップへメッセージを表示して
キー入力を待つという処理はコマンドラインではできないのでしょうか?




800:名無し~3.EXE
08/06/17 14:26:27 xgz+vgOu
普通にスタートアップに登録すればいいんじゃね?

801:名無し~3.EXE
08/06/17 16:35:18 zYoM/dJA
>ファイルが作成されない原因は分かりました。

802:名無し~3.EXE
08/06/17 17:46:07 1+L0u5+w
教えて下さい。
あるフォルダの画像ファイルのうち特定の物だけその日の日付+01.jpgのような二桁の連番にrenameしたいと思っています。1-9までは良いのですが10以降は三桁になってしまいどう対処すればいいのか判りません。よろしくお願いします。

@echo off
set /a N=1
:LOOP
for %%A in (abc*.jpg) do rename %%A %date:/=%0%N%.jpg > nul
if "%N%"=="99" (goto EXIT)
set /a N=N+1
goto LOOP
:EXIT

803:名無し~3.EXE
08/06/18 04:30:39 Xiqhpdl5
> ファイルが作成されない原因は分かりました。

原因を説明せーよ。

> ログイン時タスクで出来ないとすると、どうすれば良いのでしょうか?

スタートアップ入れればいいじゃん。

804:名無し~3.EXE
08/06/18 10:13:29 NUy0S7AO
コマンド補完で、bashやnyacusのように候補一覧を並べるのではなく、
zshのように候補を次々に表示していくシェルがあれば教えて下さい。

こんな感じでできればいいなと思う例
環境変数path内に、「testcommand01.exe」、「testcommand02.exe」がある場合
testと打ち込み TABを1回打つと、testcommand01.exeが表示され、
もう一度TABを打つとtestcommand02.exeが表示されるような感じ。

805:804
08/06/18 10:19:18 NUy0S7AO
すみません、よーく確認したらnyacusで、ほぼ同様の事ができるのでnyacus使わせてもらいます。

806:790
08/06/18 19:57:52 kUYKhkJk
>>803
レスありがとうございます。

表現が不適切でした。原因は理解できていません。
C:\Users\アカウント名の直下にバッチファイル等を置くと
ファイルに出力されないが、D:\等のドライブ名の直下に置くと
ファイルが出力される事が分かったという事です。

あと、スタートアップ時でも、現象は同じで、
echoメッセージはデスクトップには出力されません。

ログイン時に表示されないのは、OSの不具合なんでしょうか?
(ログイン後ダブルクリックで起動したら、表示されますので)

807:名無し~3.EXE
08/06/18 21:26:17 kMRIsu4a
>>793 の相対パスは絶対パスに直したのかよ?


808:名無し~3.EXE
08/06/18 21:28:03 xcv3f3Vr
>>806
まずは切り分けしてみては?

スタートアップでもダメらしいですが
遅延時間を設定してデスクトップ表示後に
実行してみたり、時間指定で動かすと
どんな挙動かを観てみてはどうでしょう



809:名無し~3.EXE
08/06/18 21:53:26 tm0Mfzl7
女『車のエンジンがかからないの…』
俺『バッテリーかな?ライトは点く?』
女『昨日はちゃんと動いたんだけど…』
俺『バッテリーかどうか知りたいんだけどライトは点く?』
女『今日は○○まで行かなきゃならないから車を使えないと…』
俺『んでライトは点く?』
女『前に乗ってた車ではこんな事無かったのに…』
俺『ライトは点く?点かない?』
女『○時に約束だからまだ時間はあるけど…』
俺『死ね』



女『ECHOが出力されないの…』
俺『パスかな?絶対パスは点けてる?』
女『スタートアップ後はちゃんと動いたんだけど…』
俺『パスかどうか知りたいんだけどパスは点けてる?』
女『今日はpingしたいからECHOを使えないと…』
俺『んでパスは点けてる?』
女『前に使ってたPCではこんな事無かったのに…』
俺『パスは点けてる?点けてない?』
女『pauseで待つ約束までまだ時間はあるけど…OSの不具合なのかな?』
俺『死ね』

810:名無し~3.EXE
08/06/18 22:46:26 kDIrIy9i
テキストファイルの50行目から、前後10行(40-60行まで)
別ファイルにリダイレクトするって、コマンドプロンプトで
出来ますか?

811:810
08/06/18 22:49:13 kDIrIy9i
すみません。環境は2K/XPです。
出来ればNT4にも対応してると嬉しいです

812:名無し~3.EXE
08/06/19 00:20:42 o/4A0OYu
unixのteeみたいに画面出力しつつファイルに落とすのってDOSでできますか?

813:名無し~3.EXE
08/06/19 00:32:47 yke/11qL
どこからか tee.exe をダウンロードして使うしか無いやろ。

814:名無し~3.EXE
08/06/19 00:33:42 yke/11qL
>>809
そのコピペ、おもしろい。名前を付けて保存・・・っと。

815:名無し~3.EXE
08/06/19 00:51:15 o/4A0OYu
>>813
つまり、デフォルトでは無理ということですか

816:名無し~3.EXE
08/06/19 01:58:58 lAQJD2cS
@if(0)==(0) echo off
cscript //Nologo //E:JScript "%~f0" %*
goto :EOF
@end
var FSO = new ActiveXObject("Scripting.FileSystemObject");
var ForAppending = 8;
var CreateIfNotExist = true;
var OverWriteIfAlreadyExist = true;
function write_file(filename, text, append_mode) {
var file_stream;
if(append_mode) file_stream = FSO.OpenTextFile(filename, ForAppending, CreateIfNotExist);
else file_stream = FSO.CreateTextFile(filename, OverWriteIfAlreadyExist);
file_stream.Write(text);
file_stream.Close();
}
function main(args) {
var append_mode = false;
var i = 0;
if(args[0]=="-a") {
append_mode = true;
i = 1;
}
var text = WScript.StdIn.ReadAll();
WScript.StdOut.Write(text);
for(; i<args.length; i++) {
var filename = args[i];
write_file(filename, text, append_mode);
}
}
var args = new Array();
for(var e=new Enumerator(WScript.Arguments); !e.atEnd(); e.moveNext()) args[args.length] = e.item();
main(args);

817:名無し~3.EXE
08/06/19 03:12:35 Qc85Wdgr
当日のイベントログの内容をCSV形式か、TXT形式で吐いてくれるバッチって作れますでしょうか?
EVENTQUERY調べていたのですが・・・
イベントログ取りたいサーバーが、Windows NT Server および Windows 2000 Serverなので使えないみたいでした。。。

その他のフィルタリングもできたらありがたいですが、できなければその後加工します。

ヒントだけでもかまいませんので よろしくお願いいたします。

818:802
08/06/19 08:08:58 +4JJC5K4
判りました。1-9と10以上で条件わけすればよいのは判っていたのですが、
なぜかうまく反映されなかったのが書き直したらうまくいきました。
お騒がせしました。

819:名無し~3.EXE
08/06/19 10:44:22 IU2H2q9l
>>810
前スレ833あたりでしてたよ。NT4に対応しているかは微妙。
あと、head.exeとtail.exeを持ってくれば楽にできる。

820:名無し~3.EXE
08/06/20 02:14:08 Tro/Oyn2
>>816
それじゃだめだろ
>画面出力しつつ

821:名無し~3.EXE
08/06/20 13:43:58 Tro/Oyn2
powershellのstart-transcriptはどうだろ?

822:名無し~3.EXE
08/06/20 21:44:21 NAkOQzpa
>820
出来るはずなんだが…。
>816は標準出力と、引数に指定したファイルに書き出すコードだぞ?
標準出力をリダイレクトしたら表示されないかも知れんが…。

823:名無し~3.EXE
08/06/21 01:32:25 LKJW76Gj
>しつつ


824:名無し~3.EXE
08/06/21 14:52:10 k6N4oqjE
>>822
816って
dir *.* | tee.bat log.txt
みたいな使い方するもんだよね?

ちゃんと継続的に画面出力をログに出力してくれてるが…

進行度みたいな同じ行で更新されるタイプの出力を画面表示と同じように出力できるものってないかな。
これはtee.exeでも同じなんだけど、
1%
2%
3%

100%
みたいに更新される毎に改行されてしまうんだな。

825:名無し~3.EXE
08/06/21 16:03:44 zfiUXgMk
hoge | tee.bat log.txt

hogeが終了するまで画面に出て来ないだろ?

826:名無し~3.EXE
08/06/21 17:16:28 gMbL69mY
>>824
title使えばいいじゃん

827:824
08/06/21 18:23:16 k6N4oqjE
ごめん勘違い。>>816の奴ダメだわ。

今までtee.exeを使ってた場所を816ので書き換えてやってみたつもりだったんだが
ちゃんと書き換わってなかった。tee.exeの動作を816の奴の動作と勘違いしていた。
書き換えたらダメだった。使えん。

>>826
進行度を出力してるのは自分が作ったバッチじゃなくて別の実行ファイルなんだ。
だからタイトルに進行度を表示するってわけにはいかない。

コマンドライン型のアンチウィルスとか、アーカイバのログを取ろうとしてるんだ。
今は一旦冗長なログを出力してからいらないところを削除したりしてる。

828:名無し~3.EXE
08/06/21 19:53:34 zfiUXgMk
readallやめてread(1)でぐるぐる回せ

829:名無し~3.EXE
08/06/23 13:15:13 0z5/ZZHn
ああ「しつつ」なのか。
ちょっと書き換えれば可能だが…やってみようかな。

830:名無し~3.EXE
08/06/23 14:05:37 0z5/ZZHn
こんなもんか?
@if(0)==(0) echo off
cscript //Nologo //E:JScript "%~f0" %*
goto :EOF
@end
Array.prototype.shift = function() {
    var r = this[0];
    for(var i=1; i<this.length; i++)
        this[i-1] = this[i];
    this.length--;
    return r;
}
var FSO = new ActiveXObject("Scripting.FileSystemObject");
var args = new Array();
for(var e = new Enumerator(WScript.Arguments); !e.atEnd(); e.moveNext())
    args[args.length] = e.item();
var append_mode = false;
if(args[0]=="-a") {
    append_mode = true;
    args.shift();
}
var files = new Array();
while(args.length > 0)
    files[files.length] = (append_mode ? FSO.OpenTextFile(args.shift(),8,true)
                : FSO.CreateTextFile(args.shift(),true));
while(!WScript.StdIn.AtEndOfStream) {
    var c = WScript.StdIn.Read(1);
    WScript.StdOut.Write(c);
    for(var i=0; i<files.length; i++) files[i].Write(c);
}
for(var i=0; i<files.length; i++)
    files[i].Close();

831:名無し~3.EXE
08/06/23 14:31:26 rv6IXUVV
俺みたいなバッチしかやったことのない無能人間には、
wshの行間で何をやってるかわからないので、解説頼む

832:名無し~3.EXE
08/06/23 14:47:47 0z5/ZZHn
ID:zfiUXgMk の指摘を元に >816 を改造しただけだよ

833:名無し~3.EXE
08/06/23 20:53:55 EzLG1D0g
流れぶった切ってすまんが
CUI上で
複数のコマンドを同時に宣言する時って&っすよね?
at 21:00 /interactive /every:M,T,W,Th,F "C:\TV.exe"&sutdown -s -t 10
みたいな感じで

834:名無し~3.EXE
08/06/23 21:04:03 wbGXdlDD
転載

条件付き処理記号を使うと、同じプロンプトから複数のコマンドを実行して、コマンドの実行結果に基づいてコマンドを実行できます。

アンパサンド (&) は、単一のコマンド ライン上で複数のコマンドを区切ります。
かっこは、複数のコマンドをグループ化します。
セミコロン ( ; ) またはカンマ ( , ) は、コマンド パラメータを区切ります。
キャレット (^) を使うと、コマンド記号をテキストとして使用できます (その記号の特殊な意味は無視されます)。
二重のアンパサンド (&&) を使うと、この記号の後に続くコマンドは、記号の前のコマンドが成功した場合にだけ実行されます。
二重のパイプ (||) を使うと、この記号の後に続くコマンドは、記号の前のコマンドが失敗した場合にだけ実行されます。


835:名無し~3.EXE
08/06/23 21:33:01 EzLG1D0g
ありがと 惚れたました

836:名無し~3.EXE
08/06/23 21:36:29 FTwpBN7+
>>830
素朴な疑問なんだけど、
Arrayクラスが元からもってるshiftメソッドをわざわざ定義しなおしたり、
せっかくEnumerator作ってるのにいったん配列に入れなおしたりしてるの
は何故?


837:名無し~3.EXE
08/06/23 21:39:41 EzLG1D0g
あと○秒後に、○○コマンドを実行するっていうのはできるんですかね?
shutdown -t 10
とかは使えるのはわかるんですが
例えば、cd \を10秒後に行うとかってできるんですかね?

838:名無し~3.EXE
08/06/23 21:47:03 ZzemjZm6
>>834
こいつは便利だ、横からサンクス

839:名無し~3.EXE
08/06/23 22:19:13 rv6IXUVV
>>837
pingを自分宛に10回叩く

840:名無し~3.EXE
08/06/23 22:20:49 EzLG1D0g
>>839
やっぱりディレイコマンドっていうのはないんですね・・

841:名無し~3.EXE
08/06/23 23:51:37 F/aJ8ivT
>>836
そっとしといてやれよ。

842:名無し~3.EXE
08/06/23 23:53:35 iWmWdG24
>837
clock.aviを再生して終わるのを待つ

843:名無し~3.EXE
08/06/24 02:32:30 pW0iI2Ae
Sleep.exe: Batch File Wait

> sleep /?
Usage: sleep time-to-sleep-in-seconds
sleep [-m] time-to-sleep-in-milliseconds
sleep [-c] commited-memory ratio (1%-100%)

rktools.exeでタダで配布されているmicrosoft公式サイト


844:名無し~3.EXE
08/06/24 03:10:57 SZVTbtHo
日本語大丈夫ですか?

845:名無し~3.EXE
08/06/24 03:38:54 pW0iI2Ae
めんどくさいから主語と助詞を抜いてるのもわからないのか
行間補完しろアホ

こんな糞スレにキチガイ粘着がいるとは思わなかった
今後このスレでは二度と教えないから
Sleep.exeはrktools.exeでタダで配布されている。microsoft公式サイトで


846:名無し~3.EXE
08/06/24 03:45:54 pW0iI2Ae
ていうかSleep.exe rktools.exe マイクロソフト公式

必要なキーワードはすべて網羅されてるからそれでわからなかったら人辞めろ
わかってるのに揚げ足取りやってるなら、クズ人間

847:名無し~3.EXE
08/06/24 04:00:37 dCCpwkqH
スレ住民 -1 

848:名無し~3.EXE
08/06/24 06:40:47 rR1+Tu8K
>836
前者は古いバージョン用。今のバージョンなら要らん。
後者は単に俺が Enumerator 苦手なだけw 是非書き直してくれ

849:名無し~3.EXE
08/06/24 12:32:47 unYk+kQr
>>837
--- sleep.vbs ---
WScript.Sleep WScript.Arguments(0)*1000
---------------

C> cscript //nologo sleep.vbs 10&cd \

850:名無し~3.EXE
08/06/24 14:06:46 SZVTbtHo
>>845
このスレの住人ならsleep.exeなんてあえて指摘されるまでもないでしょう。

それより本当に大丈夫ですか?

頭。

851:名無し~3.EXE
08/06/24 23:39:56 p7Sm4rkZ
おまいこそだいじょぶか。変な犯罪に走ったりすんなよ。

852:名無し~3.EXE
08/06/24 23:47:18 DPjkb0o1
start /b aaa.exe
start /b bbb.exe
start /b ccc.exe

という風に同時にコマンドを起動したあと、

すべてが終了するのを待って

eee.exe

を実行したいんですけど
どうすればいいですか?

unixだったらwaitで待てるんだけど

853:名無し~3.EXE
08/06/24 23:55:53 pJKSc5OV
>>852
>>754

854:名無し~3.EXE
08/06/25 01:08:25 pX/hdHEz
>>852

help start でヘルプを読め

855:名無し~3.EXE
08/06/25 01:42:30 6hXZ5y2y
>>854
/wait のことだったらこの場合使えないと思いますが・・

>>853
754を参考にしてみようとおもうんだけど

start /b コマンド の前後にexecutingファイルの作成と削除を入れたいんですが、

start /b type nul > executing.1 & command1 & del executing.1

という風に書いても、DOSの場合は、順番に実行されるわけではないんですか?

856:名無し~3.EXE
08/06/25 12:14:25 o+wlXfey
tasklistを回して終了を監視すればいい

857:名無し~3.EXE
08/06/25 15:11:52 Kh4xTa8p
それぐらいならwsh使うわ

858:名無し~3.EXE
08/06/25 16:57:52 pX/hdHEz
Set WshShell = CreateObject("Wscript.Shell")
Set a = WshShell.Exec("notepad.exe a.txt")
Set b = WshShell.Exec("notepad.exe b.txt")
Set c = WshShell.Exec("notepad.exe c.txt")

Do While a.Status = 0 Or b.Status = 0 Or c.Status = 0
WScript.Sleep 1000
Loop
Set d = WshShell.Exec("msg * うんこ")


859:名無し~3.EXE
08/06/25 17:38:22 pX/hdHEz
@echo off
start /B copy nul executing.1 ^& notepad ^& del executing.1
start /B copy nul executing.2 ^& notepad ^& del executing.2
start /B copy nul executing.3 ^& notepad ^& del executing.3
:1
cscript //nologo sleep.vbs 1
if exist executing.1 goto 1
if exist executing.2 goto 1
if exist executing.3 goto 1
msg * うんこ

・・・ sleep だけは、バッチじゃ無理。どっかから探してくるか、>>849 使う

860:名無し~3.EXE
08/06/25 19:56:59 /gx/69id
正直sleep.vbsじゃ
そのディレクトリ内にそのbatかvbsファイルないとできないじゃん

861:名無し~3.EXE
08/06/25 19:58:40 3V52NKTC
低負荷の音声ファイルを再生させるとかで1つ

862:名無し~3.EXE
08/06/25 21:27:48 Kh4xTa8p
ping.exe localhost -n 1

863:名無し~3.EXE
08/06/25 22:34:08 pX/hdHEz
>>860
頭は生きてるうちに使うもの。

echo WScript.Sleep WScript.Arguments(0)*1000>sleep.vbs


864:名無し~3.EXE
08/06/25 22:44:15 S0FVI1+e
>>863
感動した

865:名無し~3.EXE
08/06/25 22:55:12 +Awhs3oR
>>858
>>859

ほんとありがとうございます。

sleepはvbsでごまかすようにして、コマンド群は一括で定義できるように
以下のように改造してみました。

しかしcalcがないと怒られて終わってしまいます。何が悪いんでしょう??


@echo off
set com=( calc notepad )
for /f %%I in %com% do start /B copy nul executing.%%I ^& %%I ^& del executing.%%I
:1
set /a wtime=1*1000
echo WScript.Sleep %wtime% > tmp.vbs
cscript //NoLogo tmp.vbs

if exist executing.* goto 1
del tmp.vbs
echo END


866:名無し~3.EXE
08/06/26 00:05:55 bEvl4gH4
calc | notepad & echo 終わった

867:名無し~3.EXE
08/06/26 00:43:51 rFcP4Uj1
カレントにあるファイル

a_1.txt
a_2.txt
a_3.txt
a_4.txt



b_1.txt
b_2.txt
b_3.txt
b_4.txt

にリネームしたいんだけど、

for でちょちょっとできないでしょうか

868:名無し~3.EXE
08/06/26 01:20:04 ak00y0pl
わざわざfor /l %i in (1,1,4) do ren a_%i.txt b_%i.txtなんてやらんでもren a_?.txt b_?.txtでいいじゃん

869:名無し~3.EXE
08/07/01 01:23:41 06PZ+BPo
すんません
コマンドの標準出力を変数にセットするにはどうすればいいですか?

ちなみに
aaaa
というプロセスがいるかを確認するために

tasklist | find "aaaaa"
の結果を変数にぶちこんで、その変数がNULLかどうかで判定しようと考えています。

870:名無し~3.EXE
08/07/01 02:03:30 TyLpt1NP
tasklist | find "aaaaa" > unko.txt
for %%I in (unko.txt) do if %%~zI == 0 echo ぬるぽ

871:名無し~3.EXE
08/07/01 10:10:45 GuapWfI5
パイプ使ってfindなんかする理由がよくわからんが、こんなんでええちゃうの
for /F "tokens=1 delims= " %%i in ('tasklist.exe') do if "%%i"=="aaaaa.exe" (echo=aaaaa.exeを見つけた)

872:名無し~3.EXE
08/07/01 13:03:00 NO9OOEqz
if errorlevel 1だろ?

873:名無し~3.EXE
08/07/02 00:45:21 3rsfgc1I
tasklist | find "aaaaa" && echo ぷげら!

874:名無し~3.EXE
08/07/02 00:52:12 yIB7/qFo
>>871
そういう風にやるなら、

for /f %%i in ('tasklist /fi "imagename eq aaaaa.exe" /nh') do @echo %%iを見つけた

までやった方がいいかな

875:名無し~3.EXE
08/07/02 17:21:27 OMuiQSzS
tasklistがないお

876:名無し~3.EXE
08/07/02 21:09:37 HUBiufFo
windows2000でnetshを使って、IPアドレス設定バッチを作ったんですが、
LANケーブルが抜けている状態だと正常に変更できません。

もろもろの事情でLANケーブルが抜けている状態でも変更できるように
したいのですが、どうすればよいでしょうか?

877:名無し~3.EXE
08/07/03 06:48:55 S7B7seB5
>>876

Windows で TCP/IP のメディア検出機能を無効にする方法
URLリンク(support.microsoft.com)

試してはいないんだが、多分このあたり


878:名無し~3.EXE
08/07/03 08:48:56 9ohMIDqz
>>875
実は俺もXPhomeだから長らくTasklist.exeが無かったがネットでもらって来た
URLリンク(www.computerhope.com)

マイクロソフトのどこかでも落とせるらしいがそのURLは知らない
(こう書けば誰かが貼るかな)
あそこのダウンロードサイトは迷路のようになっていて、ビルゲイツ会長でさえブチ切れさせる場所だから
なるべく近寄らないようにしている
URLリンク(www.technobahn.com)


879:名無し~3.EXE
08/07/03 11:47:27 KH9cTY/t
SPから抜けよ

880:名無し~3.EXE
08/07/03 18:25:54 m7fH+sfP
フォルダであるかどうかをどうやって調べますか。

881:876
08/07/03 22:22:33 JNY6wKZ3
>>877
試してみたところ変更できました。
できればレジストリをいじらずに変更できるようにしたいんですが、
可能でしょうか。(レジストリをいじることに抵抗があるもので・・・)



882:名無し~3.EXE
08/07/03 22:48:45 JG6UUf4I
>>880
NUL を使え。

IF EXIST C:\うんこ\NUL ECHO ちんこ

883:sage
08/07/03 23:17:01 EKdOSVCV
>>882
こんな技があるとは...
助かりました。あざす。

884:877
08/07/04 06:21:02 Egjxu5mx
>>881

MSがオフィシャルなサイトでレジストリをいじれと言ってるわけなんで、
他の手はないものと思われ。
もしGUIとかがあったとしても、いずれにせよ内部的にはレジストリの
同じエントリが変更されるんだろうし。
複数台で変更するのが面倒とか自分以外の人間にやらせるのが不安とかなら、
.regファイルを作るのが正解な気が。


885:名無し~3.EXE
08/07/05 00:18:46 XqKTTUMO
このスレとム板のバッチスレってどっちがレベル高いの?

886:名無し~3.EXE
08/07/05 00:54:45 EUfbIAK/
 |      ─/ __/_ \  __|__ヽヽ /
 |        ∠    /  \ \    |     / ̄ ̄/ ̄ ̄
 |          \   /   /     / | \      /
 \_/   α/     /          |       /


887:名無し~3.EXE
08/07/05 01:05:41 C3DX+t/z
こっちのほうが高い。というか住人がみんな冷静

888:名無し~3.EXE
08/07/05 02:06:07 KsoT05Ul
     / ̄\
    |     |  
     \_/
      |
   /  ̄  ̄ \    
  /  _ノ  ヽ、_  \
/ o゚|⌒|  |⌒|゚o  \   /    /   /  | _|_ ― // ̄7l l _|_
|   | (__人__). |    | _/|  _/|    /   |  |  ― / \/    |  ――
\  | `|⌒|´ |  /    |    |  /    |   丿 _/  /     丿
/ ̄ |川!| ̄|川i| ̄\

889:名無し~3.EXE
08/07/05 13:58:04 4ebRKxUn
ム板のバッチスレは若干1名基地外が居るんだよな
ひたすらこのスレへ誘導する奴

890:名無し~3.EXE
08/07/05 15:49:45 puWbXOXI
疎開スルー

891:名無し~3.EXE
08/07/07 08:55:17 WBvdDtox
waitってどうするの?

892:名無し~3.EXE
08/07/07 12:57:56 qBTBgohG
子プロセスのいずれかが終了するまで呼び出し元のプロセスの実行を一時停止するんだよ。

893:名無し~3.EXE
08/07/08 20:20:58 cRMgCh3I
PAUSE

894:名無し~3.EXE
08/07/10 01:11:41 QngBkBT/
すみません。しつもんさせてください。
例えば、バッチを作成していて
上のコマンドの命令を行えなかった場合、エラーを表示したいのですが

例で
di
if errorlevel 1 echo a
てやるとaって表示されるのですが
これをエラーの場合は、a,エラーでない場合は、dirを実行したい
と記述するにはどうしたらいいですか?


895:名無し~3.EXE
08/07/10 05:42:57 3Yg2z5Jp
di && echo a || dir

896:名無し~3.EXE
08/07/10 15:33:43 X3fvq8uU
if/?

897:名無し~3.EXE
08/07/10 22:00:40 13vKihBB
>>895
ザンネン

898:名無し~3.EXE
08/07/10 22:05:26 13vKihBB
IF %ERRORLEVEL% == 0 (dir) ELSE (ECHO a)

899:名無し~3.EXE
08/07/11 00:16:03 Vdv4UCdi
直前のコマンドが例えばdelの時はどうする?

900:名無し~3.EXE
08/07/11 01:26:51 RkW4GqgN
あ~なるほどね。DEL は ERRORLEVEL を返さないな。
DEL の前に IF EXIST するか、
DEL の後に IF EXIST するか、
樹海で祝ってやるか、
どれかだな。

901:名無し~3.EXE
08/07/11 14:10:09 lw6JvueF
del hoge | find /v ""
if errorlevel 1 echo error!

902:名無し~3.EXE
08/07/11 18:21:23 NOWkZyK+
一つ目のプログラムを引数つきで実行させて
それが終わったら次も同じって感じにするのはどうやったらいいでしょうか。

903:902
08/07/11 18:33:00 NOWkZyK+
流れ適には
cd カレントパス(batファイルのある場所)
program -i カレントパスと指定文字列を足したファイル名
って感じです。

904:名無し~3.EXE
08/07/11 20:10:18 lw6JvueF
>>902
:hoge
hoge.exe hogehoge
goto hoge

905:名無し~3.EXE
08/07/12 04:18:41 yD5Tkok7
CD %~dp0
program -i %CD%\指定文字列

906:名無し~3.EXE
08/07/12 23:58:16 swkv5Ihd
start /wait で終了待ち。

907:名無し~3.EXE
08/07/13 02:39:59 rp/1UDNc
Linuxのsplitのように、ファイルを分割するためのコマンドは、MS-DOSには、存在しますか?

908:名無し~3.EXE
08/07/13 03:04:48 ueztd13P
ないんでねーの、今時MS-DOS触らにゃならんとは大変ね

909:名無し~3.EXE
08/07/13 03:06:30 3wulhBBH
Javaのコンパイルとかコマンドラインでやってるよ

910:名無し~3.EXE
08/07/13 07:31:09 mmwPdUKG
>>907
Native Win32 ports of some GNU utilities
ダウンロードは URLリンク(sourceforge.net)
解説は URLリンク(unxutils.sourceforge.net)


911:名無し~3.EXE
08/07/14 13:57:41 oDYeyaeV
つdebug

912:名無し~3.EXE
08/07/14 19:43:37 n25RoDk2
xpにテルネットでファイルを編集したいんですが
デフォルトのコマンドのみで可能ですか?

913:名無し~3.EXE
08/07/14 20:51:29 WHXSuf0b
どんなマシンからどんなマシンへ接続するんだよ

914:名無し~3.EXE
08/07/15 00:13:59 xfeqMLQj
それを言えば、できるようになるのかな???

915:名無し~3.EXE
08/07/15 00:22:15 qYFgCPso
vistaはeditが復活してたんですっ飛んできました

916:名無し~3.EXE
08/07/15 00:45:59 IxC+30HX
edlin

917:名無し~3.EXE
08/07/15 01:24:43 qYFgCPso
edlinって人間にも使うことができるものなんですか!?

918:名無し~3.EXE
08/07/15 07:20:21 4ChMkuSX
一応使えるが普段はまず使わないな

起動してすぐ ? 打ってEnterで
一応一通りの使い方は解るはずだぞ

919:名無し~3.EXE
08/07/15 19:37:07 cCtJmu61
Vistaではedlinもeditも日本語使えないんじゃ、英語だけで済ますの?

920:名無し~3.EXE
08/07/15 21:08:10 xfeqMLQj
素直に「できません」と、なぜ言えない?決して恥ずかしい事では無いんだぞ。

921:名無し~3.EXE
08/07/16 01:44:51 pxO0gOcj
ほんとだEditがある。英語だけど w

922:名無し~3.EXE
08/07/16 02:12:07 u0dIEc5S
@echo off
setlocal
set count=0
:loop
set flag=0
set /a count=count+1
set /a y=(count/3)*3
if /i %y% equ %count% set flag=1
echo %count% | find "3" >nul && set flag=1
if %count% geq 40 set flag=2
if /i %flag% equ 1 (
echo %count%^G
) else (
echo %count%
)
if /i %flag% equ 2 goto :end
sleep 1
goto :loop

:end
endlocal

923:名無し~3.EXE
08/07/16 03:24:31 +miDdALN
実際に使ってみると難しいエディタじゃないぞ <<EDLIN
元々使う理由は無いけどVistaでは本気で使えなくなったな

924:名無し~3.EXE
08/07/16 13:43:04 o0wLnRgo
>>912
可能
for + set + echo

925:名無し~3.EXE
08/07/16 16:47:45 CHcrAZte
東京から沖縄まで歩いて行くことが出来ますか?

926:名無し~3.EXE
08/07/16 19:16:34 50WktuQw
海あるから泳がないと無理だろな。


927:名無し~3.EXE
08/07/16 22:09:57 Syxd9oxK
座って行けると思うがw

>素直に「できません」と、なぜ言えない?決して恥ずかしい事では無いんだぞ。
話しは少しずれるが、edlinやeditが本気で使えなくなったこと(日本語が使えない)を恥ずかしがる感性をMSが持ち合わせていたならばと思ってしまう。

928:名無し~3.EXE
08/07/16 22:40:22 3tFT2zCk
海底も歩けるよ!

929:名無し~3.EXE
08/07/16 23:11:31 /0LA4MwY
すんません
ftpを簡単にするにはどんな書き方がありますか?

930:名無し~3.EXE
08/07/16 23:43:01 m92DBgjO
>>929
FTPコマンドの自動化について言ってるのであれば、
FTP スクリプチ
で検索して下さい。

それ以外である場合、回答できるAAAクラスのエスパーがこのスレにはいないと思われるので、
どうしたいのか詳細を書いて下さい。

931:名無し~3.EXE
08/07/17 00:20:26 s7qUL6sJ
FTP スクリプチの検索結果 11 件中 1 - 11 件目 (0.26 秒)

932:名無し~3.EXE
08/07/17 00:49:55 avMHCYlH
すくりぷち☆

933:名無し~3.EXE
08/07/18 01:19:22 nPyhhALC
batファイルでコマンドラインエディタを作るというのは
どのくらい大変そうですか?

934:名無し~3.EXE
08/07/18 01:50:22 XFnK5WyO
コマンドラインエディタ.bat
edlin %*


935:名無し~3.EXE
08/07/19 01:15:31 v1awZW6K
>>934
天才

936:名無し~3.EXE
08/07/23 15:49:22 tOjBlxX+
DOSのバッチでwget(外部コマンド)で複数ファイルをダウソするバッチを作っています。

WEBサーバー(IIS)にパスワードがかかっていて。

wget --user=(ユーザ名) --password=(パスワード) URLリンク(.......)<)
とやってコマンドが通るような気がする。

http://(ユーザ名):(パスワード)@www.
ともかけるので
URLリンク(A) BC:pass@www
とやってみたが、区切り文字がスペースなのでエラーになってします。

どなたかお知恵を拝借願えないでしょうか。

937:名無し~3.EXE
08/07/23 16:15:43 2vNzDCb6
"--user=A BC" でいけそうな気がする

938:名無し~3.EXE
08/07/23 16:43:57 CMWfKaqy
>>937
"--user=A BC"
--user="A BC"
"を'にした、
A^ BC
A\ BC
A%20BC

だめだった

939:名無し~3.EXE
08/07/23 18:54:02 0Y5OUEnX
--user=ABC で通らない?

940:名無し~3.EXE
08/07/25 00:00:00 cCrHmHxM
半角スペース含まれてるから、じゃねーの。>936にあるが。
うちは--user"A BC"でいけてるが。


941:名無し~3.EXE
08/07/27 20:57:41 dtq3Xkle
dos窓でcdするときに、ドライブを跨ぐとなぜ/Dオプションなんてつける必要があるんですか?
C:\>cd D:\hoge\hogeで通じるんじゃないでしょうか?

942:名無し~3.EXE
08/07/27 21:20:35 X4TwxPee
>941
ドライブ毎にカレントディレクトリの情報を持ってるから、とでも言えば良いのかな。
そもそも、カレントドライブ変更とカレントディレクトリ変更は本来別の操作。

カレントドライブの変更は
d:
と打てばDドライブへ。
c:
と打てばCドライブへ。

カレントディレクトリの変更は、ご存じの cd コマンド。

確か cd に /d オプションが付いたのは途中のバージョンからだったような。
/d は「ドライブを跨ぐ」というより「ドライブ変更とカレントディレクトリの変更を同時にやる」って感じ。

943:名無し~3.EXE
08/07/27 23:51:39 SRtDFAr7
カレントディレクトリがドライブごとにいくつもあるって考え方自体がウンコすぎる。
たとえば現在のカレントが(←って変な文章だが)C:\ だったとして、
CD A:\
COPY A.TXT B.TXT
とやっても、コピーされるのは C:\A.TXT であって、
決して A:\A.TXT では無い。
マイクロソフトはそのウンコさ加減に気づいたから、/D オプションを追加したんだろよ。
PUSHD ははじめからドライブまたぎなんだし。

944:名無し~3.EXE
08/07/28 00:34:35 GG94rwXw
D:\000\111というフォルダ構成がある時、フォルダ111以下のファイル群を111.zipという名で圧縮して
そのファイルをフォルダ000に作ってからフォルダ111を削除する、ということをwinRARを使って作ってみました。

cd /d "D:\000\111\" && "C:\Program Files\WinRAR\WinRAR.exe" a "..\111.zip" && cd ..\ && rmdir /s /q "111\"

この一文をコピペしてbatファイルを作って動かすと正常に動作するけれど、コマンドプロンプトを起動して貼り付けて
実行すると、winRARがエラーを出して処理が中断してフォルダ111下のファイルが消えてしまいます。
どうもwinRAR圧縮中に圧縮対象のファイルが削除されているようです。
&&で各コマンドを繋げているのに、なぜこうなるのですか。
batファイルとコマンドプロンプトの挙動の違いを教えてください。

945:名無し~3.EXE
08/07/28 01:23:44 +5Fl+5Tm
>winRARがエラーを出して
なにかエラーメッセージのようなものは表示されないの?

946:944
08/07/28 01:31:07 GG94rwXw
>>945
winRAR診断メッセージ 追加するファイルがありません。
コマンドプロンプト プロセスはファイルにアクセスできません。別のプロセスが使用中です

この時点でフォルダ111下のファイルは無くなってます。zipも作成されていません。

947:名無し~3.EXE
08/07/28 01:37:19 +5Fl+5Tm
じゃぁ、start /w を付ければいいんじゃないかな。こんなふうに
cd /d "D:\000\111\" && start /w "C:\Program Files\WinRAR\WinRAR.exe" a "..\111.zip" && cd ..\ && rmdir /s /q "111\"
こっちは手元に WinRAR が無いから実際に試せない。自分で試してみてね。
(WinRAR と DEL がマルチタスクで同時に動いてるのかもしれない)

948:名無し~3.EXE
08/07/28 04:06:42 lvsdyRXC
STARTは最初の""をタイトルと判断する、みたいな仕様がなかったっけ?
START "" /W "C:\Program Files\WinRAR\WinRAR.exe"の方が無難な感じ。


949:名無し~3.EXE
08/07/28 22:44:13 Flw63PUR
すいません
Dosのコマンドラインで、Unix系より優れていると言える所ってありますか?

950:名無し~3.EXE
08/07/28 22:49:37 EkjbpQg3
DOSコマンドが使える

951:944
08/07/28 23:24:35 GG94rwXw
>>947,948
start "" /w の追加で正常に動くようになりました。ありがとう。

952:名無し~3.EXE
08/07/28 23:54:52 gS9ca/Z8
>949
ホンモノのMS-DOS時代はDOSアプリが結構あったからまだ良いんだけど
コマンドプロンプトになってからは、利点あんまり無いな。
そもそも、GUIであるWindowsに取って付けたようなアプリケーションだし。
Unix系はコマンドないと手が届かない部分が結構あるからこそ、充実してるとも言えなくもない。

953:名無し~3.EXE
08/07/29 00:02:49 UhTEv5gP
ひとそれぞれじゃないか。
コマンドに慣れて無い人は窓を使えばいい。
無理してコマンド使うこたぁねぇよ。

954:名無し~3.EXE
08/07/29 00:04:07 UhTEv5gP
すいません
Windowsの窓アプリで、Unix系より優れていると言える所ってありますか?

955:名無し~3.EXE
08/07/29 00:13:06 HMBDDzG4
その歴史からWindowsのデスクトップアプリのほうが圧倒的に使える物が多いよ。
まだ、かもしれないけどね。


956:名無し~3.EXE
08/07/29 01:54:15 CkAA5d8W
「Dosのコマンドライン」ってのが何を指してるのか分からないけど
最大のメリットは現状のトップシェアOSであるWindowsで標準で使える
ってことだと思う。


957:名無し~3.EXE
08/07/29 12:51:26 luJdVJDk
分からないならレスしなくていいです。すっこんでてください。

958:名無し~3.EXE
08/07/29 19:27:14 dTIjqH8+
Linuxがすべての面で優れててDOSが劣る存在だと主張するやつは人間として糞
NTメインになってDOSは確かに使わない時代になったとおもうよ。けど
唯物論はこのOS飽和時代に全く意味は無いだろ?好きなのを適宜習得すればいいの
>>954はWINDOWS板にわざわざやってきてごくろうさんね。何を考えてるんだろうな。

959:名無し~3.EXE
08/07/29 19:31:59 3B2nZuAV
偉い人は下を見て馬鹿にする暇があるなら、使いにくいUNIXのコマンドラインよりももっとすばらしいものを開発してください。

960:名無し~3.EXE
08/07/29 19:48:24 s013n4jE
PowerShell

961:名無し~3.EXE
08/07/29 19:51:35 HMBDDzG4
>>957-959
レスのレベルからして自演にしかみえん。面白くないよ。


962:名無し~3.EXE
08/07/29 19:55:48 HMBDDzG4
>>960
マジレスでUNIX系のシェル超えててワロタw

963:名無し~3.EXE
08/07/29 23:21:52 luJdVJDk
プッ・・・ゲイツのオナニーやん

964:名無し~3.EXE
08/07/31 01:33:03 7MvSvBeb
DOS窓が使いにくいんだよ
tera termみたいのでつなげないの?
自分にtelnet以外で

965:名無し~3.EXE
08/07/31 01:36:22 oJH/78M3
ckwmodでも使ったら?

966:名無し~3.EXE
08/07/31 01:41:27 7MvSvBeb
>>965
それなに?

967:名無し~3.EXE
08/07/31 06:48:12 tRdZkavP
すいません、質問です。
Dosプロンプトで、ファイルの更新日時やアクセス時刻を変更出来るコマンドはありませんか?
(いわゆる、Unixでいうところのtouchや、utime関数に相当するものです。)

一応ぐぐってみたのですが、それを実現するフリーのファイラーソフトとかはあるようなんですが、
コマンドプロンプト(またはbatファイル)のみで(何も追加インストール等せずに)実現することは出来ないでしょうか?

copyやxcopyでは、元のファイルのタイムスタンプを保持してしまいます。
ちなみにOSはXP-sp2です。

968:名無し~3.EXE
08/07/31 10:56:39 CZC3VFh2
>>967
自分はNircmd使ってる。(他にも実現できるToolあると思うけど)
標準cmdではコマンド無いんじゃないか?

969:名無し~3.EXE
08/07/31 12:12:43 pmbkfmD5
>>967
type nul >>file

970:名無し~3.EXE
08/07/31 12:37:44 Z+lCCPZ/
>>968
ありがとうございます。ちょっと調べてみます。

>>969
うおおお、そんな手があったとは・・・・。
そういえば自分も、Unix環境でなら、0byteのファイル作成したり、
圧縮済みのlogファイルを切り詰める時に、cp /dev/null /path/to/file とかやったことがあります。


次ページ
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch