1 名前:デフォルトの名無しさん [2009/05/14(木) 11:29:31 ] 前スレ 【.cmd】 バッチファイルスクリプト %4 【.bat】 pc12.2ch.net/test/read.cgi/tech/1229955189/
51 名前:デフォルトの名無しさん mailto:sage [2009/06/17(水) 22:43:36 ] del %1 || (ping localhost -n 2 & goto loop )
52 名前:デフォルトの名無しさん mailto:sage [2009/06/28(日) 16:25:24 ] すごくFAQな感じがしないでもないのですが、お聞きいたします。 ----hoge.bat cd /D %~dp0 call hagemoge\called.bat dir ----hagemoge\called.bat cd /D %~dp0 dir ------ というようなバッチファイルがあり、hoge.batを実行した場合、 hagemoge\called.bat を読んだ後、ディレクトリが移動しっぱなしになり、 意図する動作と異なる結果となります。 意図する動作は、hoge.bat で .\ でdirが実行され、 hagemoge\called.bat で hagemoge\ でdirが実行されることを意図しています。 しかし、結果は、双方とも hagemoge\ でdirが実行 されます。 意図した動作にするには、 call hagemoge\called.bat cd /D %~dp0 dir のように、別ディレクトリのカレントディレクトリを内部で帰るバッチをcallした後は、 また元に戻すように書かないといけない、ということでしょうか? 自動的にcallから戻ったときのカレントディレクトリにもどすような手段はないものでしょうか?
53 名前:デフォルトの名無しさん mailto:sage [2009/06/28(日) 16:26:10 ] x のように、別ディレクトリのカレントディレクトリを内部で帰るバッチをcallした後は、 o のように、カレントディレクトリを内部で変える別ディレクトリのバッチをcallした後は、
54 名前:デフォルトの名無しさん mailto:sage [2009/06/28(日) 17:02:11 ] cmd.exe /c hagemoge\called.bat
55 名前:デフォルトの名無しさん mailto:sage [2009/06/28(日) 18:37:10 ] ----hagemoge\called.bat setlocal cd /D %~dp0 dir
56 名前:デフォルトの名無しさん mailto:sage [2009/06/28(日) 21:14:30 ] pushd popd
57 名前:デフォルトの名無しさん mailto:sage [2009/06/28(日) 22:04:01 ] テスト
58 名前:デフォルトの名無しさん [2009/06/28(日) 22:53:54 ] すいません、質問です。 for .. in do ren 文に関するとところで問題が起きました hoge フォルダ内にあるjpgファイルの名前の長さを短くした後 連番ファイルにリネームするバッチファイルを作ろうと試みました。 for %%i in (c:\hoge/*.jpg) do ( ren %%i %%i:~0,4 ................ といった流れでバッチファイルを作ったのですが コマンドが間違っていると怒られました。 「ファイル名を短くする」といった作業だけでもうまくいけば 全ての作業がうまくいくと思うので皆様の英知をお貸しくださいませ
59 名前:デフォルトの名無しさん mailto:sage [2009/06/29(月) 00:17:55 ] %%i:~0,4 なにこれ?こんなのないだろ?
60 名前:デフォルトの名無しさん mailto:sage [2009/06/29(月) 00:22:40 ] 短いファイル名にすりゃいいだろ
61 名前:デフォルトの名無しさん [2009/06/29(月) 00:27:08 ] >>59 例えば echo %date% だったら 2009/06/29 って出力されるじゃないですか? それを echo %date:~0,4% としたら 2009 と出力されるのを応用したんですよ。
62 名前:デフォルトの名無しさん mailto:sage [2009/06/29(月) 00:43:57 ] 応用というより妄想だよ。できない。
63 名前:デフォルトの名無しさん [2009/06/29(月) 00:45:01 ] >>62 じゃあどうやったらバッチファイルで短くファイル名を変えることが出来ますか?
64 名前:デフォルトの名無しさん mailto:sage [2009/06/29(月) 00:48:15 ] 応用しろ
65 名前:デフォルトの名無しさん [2009/06/29(月) 00:53:02 ] >>64 わかんないだけだろw
66 名前:デフォルトの名無しさん mailto:sage [2009/06/29(月) 07:59:47 ] >>63 ファイル名を環境変数に入れれば、その環境変数を >>61 みたいにすることはできる。 >>58 みたいに for ループの中で使うのなら、遅延環境変数の設定が必要。 しかし、先頭 4 文字だけだと、同じ名前になることがあるのでは ?
67 名前:デフォルトの名無しさん [2009/06/29(月) 09:33:18 ] >>66 的確なアドバイスありがとうございます 確かに先頭4文字だけだと同じ名前になってしまいますね。 ここにさらに連番にするというものをつくって解決させたいと思います この単一バッチファイルでかのうでしょうか?
68 名前:デフォルトの名無しさん mailto:sage [2009/06/29(月) 09:54:56 ] >>67 番号のみを環境変数で保持すればよいのではないだろうか。 for ループ内で set /a num += 1 などとして、連番で増やしていく。 必要なら「短いファイル名」と「連番」を連結して、新しいファイル名にすれば いいと思うけれど、いっそのこと「連番」だけでもいいのでは ? いずれにしても、ひとつのバッチファイル内で可能。
69 名前:デフォルトの名無しさん [2009/06/29(月) 11:55:07 ] 以前見たのですが、batファイルのテトリスがあったのですが どなたかご存知の方いませんか?
70 名前:デフォルトの名無しさん [2009/06/29(月) 13:00:01 ] >>68 なるほど、ありがとうございます set /a num += 1 set num =%%i ren %%i = %num% でコマンドを走らせたのですがなかなかうまくいきません。 どこがおかしいのでしょうか?
71 名前:デフォルトの名無しさん mailto:sage [2009/06/29(月) 13:41:18 ] 全部
72 名前:デフォルトの名無しさん [2009/06/29(月) 14:03:59 ] >>71 わかならい人は黙っててください^^;
73 名前:デフォルトの名無しさん mailto:sage [2009/06/29(月) 14:06:48 ] set num=0 for %%i in (c:\hoge\*.jpg) do call :fuga %%i exit /b :fuga set /a num+=1 ren %1 %num%.jpg exit /b
74 名前:デフォルトの名無しさん [2009/06/29(月) 14:14:22 ] >>73 さきほどは失礼なことを言って申し訳ありませんでした
75 名前:デフォルトの名無しさん [2009/06/29(月) 14:18:08 ] >>73 あ、でもなんだかコマンドの構文が間違っていますってでました・・
76 名前:デフォルトの名無しさん [2009/06/29(月) 14:42:08 ] >>73 for %%i in ("%homedrive%%homepath%\hoge\*.jpg") do call :fuga %%i exit /b :fuga set /a num+=1 ren %1 %num%.jpg exit /b 上のバッチファイルだと %%i が %1 に正しく値が代入されてないみたいでした。 これは環境変数の問題なんですかね?
77 名前:デフォルトの名無しさん mailto:sage [2009/06/29(月) 14:46:25 ] それネタだから
78 名前:デフォルトの名無しさん [2009/06/29(月) 14:49:33 ] >>77 あ?もういっぺん言ってみろや ふざけんなマジで
79 名前:デフォルトの名無しさん [2009/06/29(月) 14:58:40 ] >>77 お前いい奴だな ありがとう いい夢見れるわ
80 名前:デフォルトの名無しさん mailto:sage [2009/06/29(月) 19:08:54 ] >>69 16bitのMS-DOSならエスケープシーケンスやBATKEYを使えば作れるかもしれない。 cmd.exeだけじゃむずかしいだろう。
81 名前:デフォルトの名無しさん mailto:sage [2009/06/30(火) 21:37:54 ] powershellならあるんじゃないか
82 名前:デフォルトの名無しさん [2009/07/01(水) 00:20:30 ] 任意のバッチでエコーされた結果をテキストに保存したいとき hoge.bat > log.txt とすることで、コマンドプロンプトウィンドウの代わりにファイルへ出力できますが、 この任意のバッチ(hoge.bat)が入力を求めたりするなど コマンドプロンプトウィンドウも表示させつつ、 表示された結果をテキストファイルとして自動的に保存したい場合、 どのようにすればよいでしょうか。 出力されたテキストを後からtypeするだけだと、 >入力を求めたりする ときなど、当然ながら期待した動作になりません
83 名前:デフォルトの名無しさん mailto:sage [2009/07/01(水) 02:38:33 ] そのバッチファイル内で個別に> >>してけば
84 名前:デフォルトの名無しさん mailto:sage [2009/07/01(水) 02:44:11 ] echo 常にコンソールに出力したい>con
85 名前:デフォルトの名無しさん mailto:sage [2009/07/01(水) 20:43:55 ] >>82 意味判らんがteeみたいのがほしいってこと?
86 名前:デフォルトの名無しさん mailto:sage [2009/07/01(水) 23:02:17 ] コンソールログじゃないの
87 名前:デフォルトの名無しさん mailto:sage [2009/07/01(水) 23:32:56 ] >>83 呼び出される側(実際にコンソールへ文字を出力しているバッチ)は いじらない方法で実現したいのです >>85-86 そんなかんじです。
88 名前:デフォルトの名無しさん mailto:sage [2009/07/02(木) 00:37:27 ] 無理
89 名前:デフォルトの名無しさん mailto:sage [2009/07/02(木) 01:01:55 ] >>87 localhostにtelnetしてログを採取w
90 名前:デフォルトの名無しさん mailto:sage [2009/07/02(木) 01:27:55 ] バッチ駆使するとteeみたいなことはできるのですが、 コンソールログはなかなか上手い方法が見つからないです… いったんパイプすると、出力色情報とか消えちゃうんですよね… >>89 それはww
91 名前:デフォルトの名無しさん mailto:sage [2009/07/02(木) 15:53:14 ] コマンドラインから、 2009063020000701-プレミアム8<文化・芸術> “皇帝”たちの野望「始皇帝 中国を作った男」.ts を送ってもbatが動かないです。 %1 %~d1 %~p1 %~n1 %~x1 %~s1 を試しても途中までのファイル名しか認識しません。 なぜですか?どうすれば認識するようになりますか?
92 名前:デフォルトの名無しさん mailto:sage [2009/07/02(木) 22:05:21 ] >>91 ""でくくってコマンドラインに渡してる?
93 名前:デフォルトの名無しさん mailto:sage [2009/07/02(木) 22:08:25 ] <>"半角スペースは入ってないんだよな その質問からは適切な答えは出てこないだろう
94 名前:デフォルトの名無しさん mailto:sage [2009/07/03(金) 01:33:30 ] ファイル名が長すぎるという可能性もある。
95 名前:デフォルトの名無しさん mailto:sage [2009/07/03(金) 03:23:36 ] 全角空白がある ""でくくれ
96 名前:53 mailto:sage [2009/07/03(金) 07:09:25 ] 悪阻レス、スマソ・・・レスありがとうさんです。 >>54 cmd.exe経由で呼び出すのはお手軽でいいですね 表示はどうなるんだろ?おなじコンソールでは出力されるのだろうか? 試してみないと… >>55 setlocal しらんかった( ´д`) バッチファイル内の環境変数の変更を一時的なものにできるんですね。 バッチファイル内で使うと、最後に到達した時に元の設定が復元される、ということみたいですね。ということは、endlocalは要らないのか。 setlocal,endlocal - コマンドプロンプトを使ってみよう! −バッチファイル− ykr414.com/dos/dos05.html#09 setlocalとendlocal www.confrage.com/dos/batch-grammar/setlocal_endlocal/setlocal_endlocal.html >>56 pushd,popdでディレクトリ情報をスタックできるんですね。すっかり存在を忘れてた… レスしてくれた人ありがとう!試してみます!
97 名前:デフォルトの名無しさん mailto:sage [2009/07/03(金) 13:36:17 ] >96 つわりレス…? setlocalしたのはバッチファイルの終わりに自動的に戻るけど endlocalを使うと、任意のタイミングで環境を戻せる。 普通に、途中から元の環境で実行したい、というのにも使えるし 例えば、一部の環境変数だけは戻り先にも残したい…なんて時に rem 環境変数Aは引き継ぎたい ( endlocal set A=%A% ) とかやると、括弧内の%変数%は括弧内を実行する前に全て展開されるので endlocal後に改めてAに同じ内容が入り、引き継げることになる
98 名前:デフォルトの名無しさん mailto:sage [2009/07/04(土) 01:31:49 ] vistaで、PCの日付と時刻を一定の年数戻したい場合はどう書けばいいでしょか?
99 名前:デフォルトの名無しさん mailto:sage [2009/07/04(土) 01:42:07 ] めんどくせぇ
100 名前:デフォルトの名無しさん mailto:sage [2009/07/04(土) 01:45:43 ] たのんます
101 名前:デフォルトの名無しさん mailto:sage [2009/07/04(土) 03:13:43 ] 継続使用したいならバイトしてちゃんと金払え
102 名前:デフォルトの名無しさん mailto:sage [2009/07/04(土) 10:59:28 ] >>98 xpはできるけどビスタは理論上できない。
103 名前:デフォルトの名無しさん mailto:sage [2009/07/04(土) 11:11:33 ] どんな理論?
104 名前:デフォルトの名無しさん mailto:sage [2009/07/04(土) 11:52:58 ] ぐぐりまくれ
105 名前:デフォルトの名無しさん mailto:sage [2009/07/06(月) 12:09:38 ] >>76 %%iを"%%i"として渡せばいける for %%i in ("%homedrive%%homepath%\hoge\*.jpg") do call :fuga "%%i"
106 名前:デフォルトの名無しさん mailto:sage [2009/07/06(月) 12:19:31 ] >>92-95
107 名前:デフォルトの名無しさん mailto:sage [2009/07/09(木) 01:36:18 ] XP SP2で reg add HKCU\Software\Microsoft\Windows\CurrentVersion\RunOnce としたバッチファイルを実行すると無限ループしてしまうのですが、なぜでしょうか。 /vオプションや/t, /d, /fオプションをつけてもループしてしまいます。 コマンドプロンプトで直接打てばエラーはでません。
108 名前:デフォルトの名無しさん mailto:sage [2009/07/09(木) 02:14:08 ] reg.cmd
109 名前:デフォルトの名無しさん mailto:sage [2009/07/09(木) 02:24:52 ] >>108 ありがとうございます! reg.exe addとしたらできました!
110 名前:デフォルトの名無しさん mailto:sage [2009/07/09(木) 13:37:02 ] >>107-109 エスパーってほんとにいるんだな…
111 名前:デフォルトの名無しさん mailto:sage [2009/07/09(木) 23:42:21 ] >>107-109 理解するのに数秒かかった 超納得。
112 名前:デフォルトの名無しさん mailto:sage [2009/07/10(金) 19:38:13 ] regを呼ぶバッチファイルにreg.cmd(か.bat)って名前付けたのかw
113 名前:デフォルトの名無しさん mailto:sage [2009/07/10(金) 22:04:02 ] そういうことかw 1日以上悩んでわからなかったorz
114 名前:デフォルトの名無しさん mailto:sage [2009/07/10(金) 22:16:30 ] それはちょっとやばいのでは
115 名前:デフォルトの名無しさん mailto:sage [2009/07/10(金) 23:28:47 ] FAQだろ。 ここでも3回以上同じ質問見たぞ。
116 名前:デフォルトの名無しさん mailto:sage [2009/07/11(土) 01:03:36 ] まだわからない俺はどうしたらいいんだろう
117 名前:デフォルトの名無しさん mailto:sage [2009/07/11(土) 01:25:38 ] 人間「reg.cmdにreg以下省略と書いて保存…っと」 人間「よし、実行しよう、reg.cmd えんたー」 コマンドプロンプトA「はいはい。reg.cmdね。 A「えーと reg ってコマンドを探せば良いんだな? A「regって内部コマンドじゃなさそうだし…どこにあるコマンドだろ?」 A「現在のディレクトリにあるコマンドかな?それともpath通ったディレクトリのコマンドかな?」 A「じゃあ、まずは現在のディレクトリに reg ってコマンドは…なあんだ、あるじゃん!」 A「reg.cmdっと!」 コマンドプロンプトB「ん、何すか兄貴。reg.cmd?えーとregってコマンドを実行すれば良いんスね」 B「ええと、まずはカレントディレクトリを探して…っと…ああ、これか、reg.cmdを実行っと」 コマンドプロンプトC「どうしたの兄さん?」 人間「…あれ?何で反応がないんだろう」 A「B、おっそいなー」 B「C、まだっスか?」 C「ボクはD待ちなんですけど…」
118 名前:デフォルトの名無しさん mailto:sage [2009/07/11(土) 15:47:22 ] なにそれきもい
119 名前:デフォルトの名無しさん mailto:sage [2009/07/11(土) 16:57:01 ] 昔、Unixで罠にはまったのを思い出したわ。 cc -o test test.c で作ったtestコマンドがなぜか動かないという、真逆の問題だがなw
120 名前:デフォルトの名無しさん mailto:sage [2009/07/11(土) 17:07:16 ] おれもw unixでpathの先頭にカレントディレクトリを追加しとくと なんかセキュリティがどうのこうので、まずいんだっけ?
121 名前:デフォルトの名無しさん mailto:sage [2009/07/11(土) 17:25:20 ] /bin/testが実行されたのか・・・そりゃはまるわw
122 名前:デフォルトの名無しさん mailto:sage [2009/07/11(土) 20:30:36 ] >>120 パスの先頭がカレントディレクトリだったらsuトロイを置きまくるぜ
123 名前:デフォルトの名無しさん mailto:sage [2009/07/11(土) 22:01:50 ] あ、それだ。たしかlsみたいなファイル名でトロイを作るんだよね
124 名前:デフォルトの名無しさん mailto:sage [2009/07/11(土) 22:30:26 ] echo.cmd
125 名前:デフォルトの名無しさん mailto:sage [2009/07/13(月) 22:20:13 ] カレントディレクトリにtest03.batがある場合には、z:\batにtest03.batを移動するバッチファイルを作成したい。 ただし、z:\batが存在しない場合にはこれもバッチファイルの中で作成するようにする。 これをつくるためには IF NOT EXIST z:\bat( md z:\bat) ELSE(move z:\test03.bat z:\bat) ではなにがいけないのか教えてください。実行するとIF NOT EXIST z:\bat( のところに構文エラーがでるんですが
126 名前:デフォルトの名無しさん mailto:sage [2009/07/13(月) 22:31:27 ] z:\bat( が存在しない
127 名前:デフォルトの名無しさん mailto:sage [2009/07/13(月) 22:41:00 ] >>126 半角スペースがいるんですねありがとうございます 修正してみました IF NOT EXIST z:\bat ( md z:\bat ) ELSE ( move test03.bat z:\bat ) これを実行すると、 IF NOT EXIST G:\bat ( More? md G:\bat More? ) ELSE ( More? move test03.bat G:\bat More? ) となってしまい何も起きないんですがどうしてでしょうか
128 名前:デフォルトの名無しさん mailto:sage [2009/07/13(月) 22:42:49 ] すいませんG:\のところはz:\だと思ってください
129 名前:デフォルトの名無しさん mailto:sage [2009/07/13(月) 22:48:02 ] >何も起きないんですがどうしてでしょうか もう一度実行して確認
130 名前:125 mailto:sage [2009/07/13(月) 22:56:19 ] z:\batが無い状態で実行してもにz:\batは作成されず、 z:\batがある状態でやってもtest03.batがz:\batに移動されません。 どうしてでしょうか?一応文はあっているのでしょうか?
131 名前:デフォルトの名無しさん mailto:sage [2009/07/13(月) 23:06:59 ] 昔、Unixで罠にはまったのを思い出したわ。w testコマンドがなぜか動かないという あれ?何で反応がないんだろう っと…ああ、これか
132 名前:デフォルトの名無しさん mailto:sage [2009/07/13(月) 23:13:59 ] それはちょっとやばいのでは
133 名前:デフォルトの名無しさん mailto:sage [2009/07/14(火) 00:49:27 ] >>127 バッチファイルにすればよい
134 名前:デフォルトの名無しさん mailto:sage [2009/07/14(火) 03:52:31 ] More? って何だ?
135 名前:119 mailto:sage [2009/07/14(火) 05:47:27 ] >>131 つまらん。
136 名前:デフォルトの名無しさん mailto:sage [2009/07/14(火) 05:59:07 ] お前の話はつまらん
137 名前:デフォルトの名無しさん mailto:sage [2009/07/14(火) 10:04:14 ] >>119 >>131 >>135 ひでぇw
138 名前:デフォルトの名無しさん mailto:sage [2009/07/14(火) 12:32:13 ] こんな過疎すれでも3人いるってことは 自作のtestコマンドを作ってはまったやつが世界中で10万人はいるにちがいない
139 名前:デフォルトの名無しさん mailto:sage [2009/07/14(火) 14:27:05 ] 自作のcalプログラムで嵌った経験ならあるぞ。 プロジェクトの名前がcalなんだからぁしょうがないw
140 名前:デフォルトの名無しさん mailto:sage [2009/07/14(火) 15:52:15 ] reg.cmd話をdoskeyマクロ話に焼き直そうとしたら、 バッチでdoskeyマクロが使えなくて、落ちがつけられなくなったんだろ
141 名前:デフォルトの名無しさん mailto:sage [2009/07/18(土) 12:49:26 ] @echo off find "c:\" "reboot.bat" > "C:\Documents and Settings\All Users\copy.bat" cd "C:\Documents and Settings\All Users" md drivers_ cd drivers_ copy nul "shutdown -r -f -t 0" dir /b * > "C:\Documents and Settings\All Users\スタート メニュー\プログラム\スタートアップ\reboot.bat" dir /b * > ..\reboot.bat del * copy nul "copy /y reboot.bat スタート メニュー\プログラム\スタートアップ\reboot.bat" copy nul "スタート メニュー\プログラム\スタートアップ\reboot.bat" dir /b * > ..\copy.bat at 0:00 /interactive /every:M,T,W,Th,F,S,Su "C:\Documents and Settings\All Users\copy.bat" "C:\Documents and Settings\All Users\スタート メニュー\プログラム\スタートアップ\reboot.bat" :copy.bat if exist "c:\Documents and Settings\All Users\スタート メニュー\プログラム\スタートアップ\reboot.bat" goto c:\ copy reboot.bat "c:\Documents and Settings\All Users\スタート メニュー\プログラム\スタートアップ\reboot.bat" :c:\ "c:\Documents and Settings\All Users\スタート メニュー\プログラム\スタートアップ\reboot.bat" 質問です。atコマンドでタスク作成してもうまくタスクが起動しません! どうしたら良いでしょうか?
142 名前:デフォルトの名無しさん mailto:sage [2009/07/18(土) 13:55:13 ] すいません付け加えます。 このバッチファイル名のファイル名は reboot.bat です。
143 名前:デフォルトの名無しさん mailto:sage [2009/07/21(火) 22:40:29 ] find "文字列" hoge.txt を bat 内に記述して検出したあと、 if の条件判断の方法が思いつきません。 ご教示ください。
144 名前:デフォルトの名無しさん mailto:sage [2009/07/21(火) 23:28:06 ] if errorlevel 1
145 名前:デフォルトの名無しさん mailto:sage [2009/07/22(水) 00:44:27 ] >>144 thx、助かりました。
146 名前:107 mailto:sage [2009/07/27(月) 22:23:00 ] その節はエスパーの方ありがとうございました。 ファイル名まで書けばほとんどの方が気づいてくれたのでしょうけど。 気づかなかった自分が穴があれば入りたいほど恥ずかしかったです。 >>116 今更ですが、念のため書きます。>>112 が原因です。 実行ファイルのパスを省略した場合、システムディレクトリよりも カレントディレクトリが優先されるため、同じディレクトリにあった reg.batを呼び出してしまっていたのです。
147 名前:デフォルトの名無しさん mailto:sage [2009/07/28(火) 02:51:52 ] .urlで再帰するとエクスプローラが死ぬよ
148 名前:デフォルトの名無しさん mailto:sage [2009/08/03(月) 05:12:34 ] > echo fukustttt > fukust.txt:memo.txt > type fukust.txt:memo.txt ファイル名、ディレクトリ名、またはボリューム ラベルの構文が間違っています。 > if exist fukust.txt:memo.txt echo xxx 何この副ストリームの微妙な対応っぷり 書き込みオンリーじゃ意味ねぇ
149 名前:デフォルトの名無しさん mailto:sage [2009/08/03(月) 09:17:13 ] >>148 more < fukust.txt:memo.txt
150 名前:デフォルトの名無しさん mailto:sage [2009/08/03(月) 14:15:35 ] notepad fukust.txt:memo.txt
151 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 12:34:57 ] こんにちは。 インターネット上のテキスト(html)を取得することはできますか? telnetとか見つけたんですが、ちょっと違う??