1 名前:デフォルトの名無しさん [2008/08/04(月) 23:27:23 ] 拡張子が .cmd または .bat のバッチファイルのスクリプティング(プログラミング)に関わる 質問,テクニック(JScript,Perl等の埋め込みなど含む),関連情報のためのスレです。 ※何でも無理矢理バッチでやろうとせず、WSH等の使用も検討しましょう。 【前スレ】 (関連スレは>>2 ) 【.cmd】 バッチファイルスクリプト %2 【.bat】 pc11.2ch.net/test/read.cgi/tech/1197881068/
76 名前:デフォルトの名無しさん mailto:sage [2008/08/16(土) 18:20:47 ] >>74 キモヲタ涙目w
77 名前:デフォルトの名無しさん [2008/08/17(日) 02:55:50 ] ウィザード形式でバッチファイルやバッチコマンドを生成してくれるようなソフトってある? 全部のコマンドとは言わないけど、for系とかfindstr系とかのややこしそうなやつだけでも。
78 名前:デフォルトの名無しさん [2008/08/17(日) 03:26:33 ] こなの見つけた www.google.com/search?q=dr.batcher&num=5
79 名前:デフォルトの名無しさん mailto:sage [2008/08/17(日) 03:58:05 ] 便利な外部コマンド(ベクターとかに)いっぱいあるけど、 普通のfor文やwhile文が使える外部コマンドがあったら、 すげー便利だろうなぁ
80 名前:77 [2008/08/17(日) 11:09:46 ] >>78 いやぁ、あるもんだなぁ。さんくす。ちょっと使い込んでみるわ。
81 名前:デフォルトの名無しさん mailto:sage [2008/08/17(日) 13:36:41 ] >>79 powershell.exe cscript.exe mshta.exe
82 名前:デフォルトの名無しさん mailto:sage [2008/08/17(日) 19:35:23 ] >>78 それってOS/2のDr.Dialog作ってたところ?
83 名前:デフォルトの名無しさん mailto:sage [2008/08/17(日) 22:42:10 ] DrDialog、あれはいいものだ・・・
84 名前:デフォルトの名無しさん mailto:sage [2008/08/20(水) 04:25:11 ] ひょっとしたら1行で済むかもしれないが、俺には考え付かなかったので質問… ren *.exe *.exe.dat で拡張子を偽造したファイルが同一ディレクトリに大量に 存在するのだが、この拡張子を簡単に *.exe に戻すバッチが思いつかない。 仕方ないので今はバッチからWSHを呼び出しているが、これをなるべく少ない行数 のバッチで処理する方法ってある? exe等の外部ファイルが使用できないため、何とかバッチだけで処理したいのだが 何かいい方法ってあります? (1行で済むなら板違いなので申し訳ない)
85 名前:デフォルトの名無しさん mailto:sage [2008/08/20(水) 04:36:09 ] ren *.exe *.
86 名前:デフォルトの名無しさん mailto:sage [2008/08/20(水) 04:37:08 ] >>85 ren *.exe.dat *.
87 名前:デフォルトの名無しさん [2008/08/20(水) 05:44:14 ] >>84 for %i in (*.exe.dat) do ren %i %~ni for文使えるとラクだぞ。 ディフォルトのWindowsである程度の処理は可能。 C:\WINDOWS\Help\ntcmds.chm
88 名前:デフォルトの名無しさん [2008/08/20(水) 06:20:53 ] Windowsならbat+wsh最強。 なんたってディフォルト。 RubyとかPerlとかPythonとかいらね。 Windowsしか使わないのにRubyとか笑えるw スクリプトで済む事をexeにしてVectorに臆面もなく公開とか超うけるw まぁ、異論は認める。
89 名前:デフォルトの名無しさん mailto:sage [2008/08/20(水) 10:16:53 ] >>88 昔、某セキュリティソフトにwshであるというだけでウィルスの疑いをかけられたので なんとなくwshを敬遠してしまう。
90 名前:デフォルトの名無しさん mailto:sage [2008/08/20(水) 11:18:42 ] WSHっつってもVBScriptかJScriptでしょ?
91 名前:デフォルトの名無しさん mailto:sage [2008/08/20(水) 12:34:56 ] VBScriptはFSOとかすぐに反応してくるからな…
92 名前:デフォルトの名無しさん mailto:sage [2008/08/20(水) 12:44:37 ] WSH用のbatエンジンが開発されたのかとおもったぜ。
93 名前:84 ◆W4wSOopp0M mailto:sage [2008/08/20(水) 13:45:45 ] >>85 >>87 ありがとう! というか、やっぱり1行でできるのか… 特に ren の *. には参った。 普段よく使うコマンドなのに、こういう使い方、全く知らなかった。 なぜ [*.] で拡張子が消えるのかいまだにわからないが、 恥ずかしくて、これ以上ここで質問できない…。
94 名前:デフォルトの名無しさん mailto:sage [2008/08/20(水) 14:03:37 ] *.はDOS時代からの仕様というしかないからな。 ファイル名にほぼ制限のない現在からすると変に見えるのはしかたない。
95 名前:デフォルトの名無しさん mailto:sage [2008/08/20(水) 15:27:23 ] ↑こいつは何を言ってるんだw
96 名前:デフォルトの名無しさん mailto:sage [2008/08/20(水) 18:34:36 ] >>93 なぜもなにも、そういう仕様だからだよ。 technet2.microsoft.com/WindowsServer/ja/library/f924c4f9-d135-4f25-900d-8e95ad1b09391041.mspx
97 名前:デフォルトの名無しさん mailto:sage [2008/08/20(水) 21:20:19 ] ↑こいつは何を言ってるんだw
98 名前:デフォルトの名無しさん mailto:sage [2008/08/21(木) 00:13:28 ] command.comからcmd.exeに変わったときに切り捨ててもよかったと思う物の一つだねぇ。拡張子のアレ
99 名前:デフォルトの名無しさん mailto:sage [2008/08/21(木) 01:32:14 ] このスレの人間はワイルドカードも知らんのか?!
100 名前:デフォルトの名無しさん [2008/08/21(木) 08:17:43 ] 知ってるけどなにか
101 名前:デフォルトの名無しさん mailto:sage [2008/08/21(木) 11:48:24 ] あぁゴメン >>94 と>>98 だけだよな、ワイルドカード知らないのなんてw
102 名前:デフォルトの名無しさん mailto:sage [2008/08/21(木) 14:31:01 ] >拡張子のアレ ソレは関係ないよ
103 名前:デフォルトの名無しさん mailto:sage [2008/08/21(木) 14:35:40 ] >なぜもなにも、そういう仕様だからだよ。 >ttp://technet2.microsoft.com/WindowsServer/ja/library/f924c4f9-d135-4f25-900d-8e95ad1b09391041.mspx ほんとかどうか試してから言えよ。
104 名前:その1 mailto:sage [2008/08/21(木) 22:16:44 ] 分かり難くて申し訳ありませんが、ご教授お願いします。 以下は、temp.txtというファイルに「ok」の文字列があった場合、 何もせず次の処理へ移行し、もし「ok」の文字列が無い場合は、 hello!!を5回連続して表示させたいと思い書いたものです。 ---------------------------------------------------------------- @echo off for /L %%i in (1,1,5) do ( echo %%i回目の処理を行います。 find "OK" < temp.txt if errorlevel 1 goto NG temp.txt if errorlevel 0 goto OK temp.txt :NG echo hello :OK echo 条件に一致している為、なにもしません。 goto END ) :END echo 次の処理へ続く・・・ ----------------------------------------------------------------
105 名前:その2 [2008/08/21(木) 22:18:04 ] 自分の行わせたかった動作としては、「ok」の文字列が無い場合、 1回目の処理を行います。 hello 2回目の処理を行います。 hello ・・・・が、5回続くようにしたかったのですが、実際には以下になります。 1回目の処理を行います。 hello 条件に一致している為、なにもしません。 次の処理へ続く・・・ 5回繰り返すというfor文の記述が無視されています。 「goto END」に問題があるとは思いますが、いろいろ記述を変更しても、 思うような動作になりません。 どのようにすれば、for文の記述通り、5回の処理を行えるでしょうか。
106 名前:デフォルトの名無しさん mailto:sage [2008/08/21(木) 23:37:07 ] OKラベルをforの外、いっちゃうとENDと置き換える。 たぶん勘違いしてるところはラベルは制御ブロックをつくるわけじゃなく 単に飛び先を提供しているだけなので、NGラベルへ飛んでecho helloしたら 次はOKラベル以降に突入するってこと。 とりあえず慣れんうちは先頭の@echo offを外しとく。
107 名前:デフォルトの名無しさん mailto:sage [2008/08/21(木) 23:41:31 ] >>105 全部書き直したくなるが…w :NG → :OK と書くからNGに行ったものも全てOKの処理を経て全部ENDへ飛ぶ。 :OK → :NG と書いてNGの時はOKの処理を飛ばせ。
108 名前:デフォルトの名無しさん mailto:sage [2008/08/23(土) 00:13:49 ] >>104 仮にそれで動いたとして、 temp.txtを5回走査することになるがどう思うよ?
109 名前:デフォルトの名無しさん [2008/08/23(土) 15:26:09 ] >>105 テスト用ソースじゃなくて実際にする事を詳しく聞いた方がいいぞ
110 名前:デフォルトの名無しさん mailto:sage [2008/08/24(日) 21:34:59 ] >>104 IF okが見つかった ( SET FLAG=TRUE ) ELSE ( SET FLAG=FALSE ) IF NOT %FLAG%==FALSE ( FOR /L %%I IN (1,1,5) DO ( ECHO hello ) ) ECHO 次の処理へ
111 名前:デフォルトの名無しさん mailto:sage [2008/08/24(日) 23:03:51 ] つーかFLAG必要なくね?
112 名前:デフォルトの名無しさん mailto:sage [2008/08/28(木) 22:29:25 ] 俺ならforの処理内容を丸ごとラベルに飛ばしてcallするところかな
113 名前:デフォルトの名無しさん mailto:sage [2008/08/28(木) 23:18:56 ] >>112 IF おk ( CALL :OK ) ELSE ( CALL :NG ) GOTO :END NG: ECHO 次の処理へ GOTO :EOF :OK るーぷ GOTO :EOF :END GOTO :EOF
114 名前:デフォルトの名無しさん mailto:sage [2008/08/29(金) 10:18:07 ] NGのラベル付け間違ってるぞ
115 名前:デフォルトの名無しさん mailto:sage [2008/08/29(金) 11:41:10 ] 大文字やめろよ、気持ち悪いw
116 名前:デフォルトの名無しさん mailto:sage [2008/08/29(金) 11:46:50 ] ラベルをCALLするなんて上等なことができるのか きちんと戻るんだろうな?
117 名前:デフォルトの名無しさん mailto:sage [2008/08/29(金) 12:55:57 ] >>116 w
118 名前:デフォルトの名無しさん mailto:sage [2008/08/29(金) 15:27:08 ] いくらなんでもこれは釣りだよな?
119 名前:デフォルトの名無しさん mailto:sage [2008/08/29(金) 17:17:53 ] call exit 戻ってこないよー
120 名前:デフォルトの名無しさん mailto:sage [2008/08/29(金) 17:29:45 ] call call echo なんて
121 名前:デフォルトの名無しさん mailto:sage [2008/08/29(金) 19:13:51 ] dosのbat書いてた人にしてみれば普通の感想。 call %1 とかやって罠にはまったことのあるやつも多いだろう。
122 名前: ↑ mailto:sage [2008/08/29(金) 19:15:35 ] %1 じゃなくて %0 の間違い
123 名前:デフォルトの名無しさん mailto:sage [2008/08/29(金) 19:54:05 ] それは関係ないだろ %0 と書いても同じ
124 名前:デフォルトの名無しさん mailto:sage [2008/08/29(金) 22:41:22 ] リカーシブコールで罠にはまるとか(笑)
125 名前:デフォルトの名無しさん mailto:sage [2008/08/29(金) 23:48:39 ] 罠ってのはね〜、中でcdしてるとき相対パスで使われちゃうとか〜
126 名前:デフォルトの名無しさん mailto:sage [2008/08/30(土) 00:04:53 ] 再帰呼び出しも出来ないマヌケw
127 名前:デフォルトの名無しさん mailto:sage [2008/08/30(土) 00:15:35 ] そうそう、単なるサブルーチンを同一ファイルにまとめたいだけだったのに、 わけ分からん動作になってまいりましたよw
128 名前:デフォルトの名無しさん mailto:sage [2008/08/30(土) 01:58:42 ] >>116 call /?
129 名前:デフォルトの名無しさん mailto:sage [2008/08/30(土) 20:31:45 ] echo で空行って表示出来ないの? @echo off aaa ECHO は <OFF> です。 bbb pause を実行すると aaa ECHO は <OFF> です。 bbb って表示される
130 名前:デフォルトの名無しさん mailto:sage [2008/08/30(土) 20:33:38 ] 間違えた。こっち。 @echo off echo aaa echo echo bbb pause
131 名前:デフォルトの名無しさん mailto:sage [2008/08/30(土) 20:39:45 ] echo= scho\ echo[ echo] echo{ echo: echo; echo+
132 名前:デフォルトの名無しさん mailto:sage [2008/08/30(土) 21:35:53 ] >>129 echo. だろjk
133 名前:デフォルトの名無しさん mailto:sage [2008/08/30(土) 22:41:11 ] できた!サンキュッ!
134 名前:デフォルトの名無しさん mailto:sage [2008/08/31(日) 00:01:17 ] つくづく、echo って、おバカな仕様ですよね。
135 名前:デフォルトの名無しさん mailto:sage [2008/08/31(日) 01:10:10 ] ↑echoよりバカ
136 名前:デフォルトの名無しさん mailto:sage [2008/08/31(日) 16:03:39 ] echo.exe
137 名前:デフォルトの名無しさん mailto:sage [2008/09/01(月) 15:47:13 ] >131 横レスだがこんなんでも出来たのか。 2番目スペルミスで5番目はエラーだけど。
138 名前:デフォルトの名無しさん mailto:sage [2008/09/02(火) 23:47:01 ] エチョー
139 名前:デフォルトの名無しさん mailto:sage [2008/09/03(水) 15:41:06 ] エクスプローラで chinco.txt ← これをマウスでドラッグして unko,bat ← ここにドロップする これは出来るんですが、 インターネットエクスプローラかFireFoxで表示中のWEBページの リンクをマウスでドラッグしてバッチファイルにドロップできません。 BAT でも VBS でもできません。 なにかいい方法はありませんか?
140 名前:デフォルトの名無しさん [2008/09/03(水) 15:50:07 ] ファイル名を指定して実行にはドロップできるよ
141 名前:デフォルトの名無しさん mailto:sage [2008/09/03(水) 17:45:39 ] >>139 エクスプローラやインターネットエクスプローラかFireFoxみたいな パソコンの使い方の質問は板違い こっち↓で質問した方がいい PC初心者 pc11.2ch.net/pcqa/
142 名前:デフォルトの名無しさん mailto:sage [2008/09/03(水) 19:20:17 ] このスレにしてはめずらしく正しい誘導だな
143 名前:デフォルトの名無しさん mailto:sage [2008/09/03(水) 22:38:22 ] htaで受ける
144 名前:デフォルトの名無しさん mailto:sage [2008/09/04(木) 00:49:48 ] このスレの住人は、wshについてどういう見解なのでしょうか? 1.バッチもWSHも両方出来る 2.バッチしか出来ない(Wshに移行したい) 3.Wshよりバッチの方が優れてる(Wshに移行するつもりは無い)
145 名前:デフォルトの名無しさん mailto:sage [2008/09/04(木) 03:09:28 ] 1
146 名前:デフォルトの名無しさん mailto:sage [2008/09/04(木) 19:40:39 ] 両方使えるが、ここがム板のバッチスレである以上 どうしてもバッチじゃ無理なところだけは例外にしても 7割以上WSHでゴリゴリやるようならスレ違いだと思ってる
147 名前:デフォルトの名無しさん [2008/09/04(木) 19:44:11 ] そもそもバッチというものはだな、
148 名前:デフォルトの名無しさん mailto:sage [2008/09/04(木) 20:08:29 ] 俺達の未来そのものだよ
149 名前:デフォルトの名無しさん mailto:sage [2008/09/04(木) 21:45:15 ] >>144 釣り… だよな
150 名前:デフォルトの名無しさん [2008/09/05(金) 01:45:43 ] ていうかさ、bat通り越してplとかpyとかrbとかって健全じゃないと思うんだ。 wshとかならまだいいけどさ。 batが頼りないのは誰もが承知してるんだ。 でもディフォルトで使えるのはbatかwshくらいなもんだろ? で、どっちが早く仕事できるかっつったらやっぱbat。異論は認める。 ちょっとしたインストーラなんてほんの数行から十数行で済むしさ、 エンドユーザ共にシステムフォルダにhoge.dllをコピーしてregsvr32するんだっつっても 奴らちんぷんかんぷんだからさ、ちょっとbatつけたげればそれで解決。説明するよりずっと早いわけ。 ここでさ、お前らRubyのwin32バイナリをダウンロードして、インストールしろって説明から始めよう としたら本末転倒だろ? やっぱbat。お前らこれからもbatには世話になるはずだろ?
151 名前:デフォルトの名無しさん mailto:sage [2008/09/05(金) 10:11:27 ] del /Q *.*
152 名前:デフォルトの名無しさん [2008/09/05(金) 16:10:32 ] PROGRAM filename というように実行するプログラム PROGRAM がありますが、 どうも filename と同じフォルダからしか実行できないみたいなんです。 そこで、以下を実行するバッチを作りたいと思います。 cd filenameと同じフォルダ PROGRAM filename を実行 cd 元のフォルダ filename と同じフォルダをどうやって取得するのか分からないので、 教えていただけないでしょうか。 または、他によい方法があれば教えていただけないでしょうか。 よろしくお願いいたします。
153 名前:デフォルトの名無しさん mailto:sage [2008/09/05(金) 16:47:39 ] >152 まず基本的なパソコンの使い方を勉強しましょう PC初心者 pc11.2ch.net/pcqa/
154 名前:デフォルトの名無しさん mailto:sage [2008/09/05(金) 17:13:34 ] >152 環境変数PATHを設定すれば、どこのディレクトリに居ても呼べるよ 設定の仕方はOSのバージョン毎に微妙に異なるが
155 名前:デフォルトの名無しさん mailto:sage [2008/09/05(金) 17:16:50 ] プログラム板でパソコンの使い方を教える馬鹿
156 名前:デフォルトの名無しさん mailto:sage [2008/09/05(金) 17:19:28 ] ↑救いようのないバカw
157 名前:152 [2008/09/05(金) 17:49:25 ] どうも説明が足りなくてすみません。 今回はパスの設定では解決しません。 PROGRAM は filename を処理して、中間ファイルを filename と 同じフォルダに吐いて、さらにそれを処理します。 PROGRAM を filename と同じフォルダで実行しないと、 中間ファイルをどこに吐いたのか分からなくなっちゃうみたいなんですよね。 ちなみに、環境変数を設定して解決するのは、 「PROGRAM のおいてあるフォルダでしかPROGRAMが実行できない」場合で、 「filename のおいてあるフォルダでしかPROGRAMが実行できない」場合では ないですよね? 引き続き、ご返答いただけないでしょうか。
158 名前:デフォルトの名無しさん mailto:sage [2008/09/05(金) 17:50:20 ] おじいちゃんに環境変数PATHの意味と設定方法とか バッチスクリプトについて教えているパソコン教室があるのか気になるところだな
159 名前:デフォルトの名無しさん mailto:sage [2008/09/05(金) 18:05:32 ] >157 ああ、そういうことか。こっちこそ早とちりスマソ。 ttp://technet2.microsoft.com/WindowsServer/ja/library/97731e49-ffa3-4918-87fb-5318743f29321041.mspx とかどうよ? filenameがコマンド引数ならそのまま、そうでないならcallと組み合わせればいけるかと。
160 名前:デフォルトの名無しさん mailto:sage [2008/09/05(金) 18:09:35 ] >>152 filenameを引数にとるバッチと仮定するとこんな感じかな pushd "%~dp1" PROGRAM "%~1" popd
161 名前:デフォルトの名無しさん mailto:sage [2008/09/05(金) 23:17:58 ] set BaseDir=%CD% cd /d filenameのフォルダ PROGLAMを実行 cd /d %BaseDir%
162 名前:デフォルトの名無しさん mailto:sage [2008/09/06(土) 01:28:08 ] set unko="toilet"
163 名前:デフォルトの名無しさん mailto:sage [2008/09/06(土) 09:08:42 ] あるテキストファイルから読んだ%%aは常に整数なんですが、これを計算する方法はありますか? set /a n=%%a * 2 とかできないみたいで
164 名前:デフォルトの名無しさん mailto:sage [2008/09/06(土) 09:41:45 ] >>163 %%aってことはテキストの読み込みにfor使ってるんだろうけど それなら計算できてないんじゃなくて参照できてないだけ setlocal ENABLEDELAYEDEXPANSION for /f %%a in (n.txt) do ( set /a n=%%a * 2 echo !n! )
165 名前:163 mailto:sage [2008/09/06(土) 10:08:37 ] へええええ 希望通りになりました どうもありがとうございます
166 名前:デフォルトの名無しさん mailto:sage [2008/09/06(土) 13:28:54 ] こういうのはechoをonにしてループしてる部分を見れば 遅延展開してない部分が全ループで同じになってるのですぐわかる。
167 名前:デフォルトの名無しさん mailto:sage [2008/09/06(土) 15:08:57 ] >>166 遅延云々なんかより先に forの中で変数展開できないのかー としか思わんだろ
168 名前:デフォルトの名無しさん mailto:sage [2008/09/06(土) 15:38:06 ] 変数展開できないとは思わんでしょ。 >>164 の!n!を%n%にしてると実際にまわるのは%n%が空で set /a n=%%a * 2 echo これのループになるんだから。変数参照してねーよってのがすぐわかる。
169 名前:デフォルトの名無しさん mailto:sage [2008/09/06(土) 23:26:20 ] >>168 んー俺ならループ回す前に変数初期化するしなー set n=0 で回したら、ひたすら echo 0 でしょ なんだ、forループじゃ変数いじれないのか? と思ってしまう
170 名前:デフォルトの名無しさん mailto:sage [2008/09/06(土) 23:58:33 ] 変数いじれないのかとか思うのは人それぞれだけど、 実際に何が起きてるかは一目瞭然じゃん? >>163 は計算が出来ていないと勘違いしたみたいだけど、実際は 変数の参照が出来ていなくて全て定数を参照していたわけだから。
171 名前:デフォルトの名無しさん mailto:sage [2008/09/07(日) 00:06:57 ] そうだそうだ
172 名前:デフォルトの名無しさん mailto:sage [2008/09/07(日) 00:27:37 ] >>169 バカは黙ってろw
173 名前:デフォルトの名無しさん mailto:sage [2008/09/07(日) 00:30:54 ] >>172 お前もなw
174 名前:デフォルトの名無しさん mailto:sage [2008/09/07(日) 00:35:13 ] ん?悔しかったの?
175 名前:デフォルトの名無しさん mailto:sage [2008/09/07(日) 00:51:19 ] 俺は>>169 じゃない
176 名前:デフォルトの名無しさん mailto:sage [2008/09/07(日) 02:43:17 ] まぁ一筋縄じゃいかないってことには遅かれ早かれ気付くだろうな