【.cmd】 バッチファイルスクリプト %8 【.bat】at TECH
【.cmd】 バッチファイルスクリプト %8 【.bat】 - 暇つぶし2ch148:デフォルトの名無しさん
11/10/12 23:50:38.95
192.168.0.1という文字列を引き渡して、最後の1だけを254に
置き換えたいのですが、どうやったらできますでしょうか?
forを使ってやってみたのですが、うまく置き換えられません。
よろしくお願いします。

149:デフォルトの名無しさん
11/10/12 23:51:22.22
>>147
動かないです><

150:デフォルトの名無しさん
11/10/12 23:56:17.44
>>148
set a=192.168.0.1
echo %a:~0,-1%254

151:デフォルトの名無しさん
11/10/13 00:03:12.90
>>149
すいません、忘れてました。>>109のpauseに下記を代入してください。
echo "%DTITLE:~1,-1%","%DNAME:~1,-1%">>aaa.txt
これで多分大丈夫だと思います。

152:デフォルトの名無しさん
11/10/13 00:20:07.61
set a=192.168.0.1
set b=254
for /f "tokens=1,2,3,* delims=." %%A in ("%a%") do set c=%%A.%%B.%%C.
echo %c%%b%
pause
exit /b

153:デフォルトの名無しさん
11/10/13 22:35:06.20
>>148
これだと一桁しかダメでした。説明不足ですみません。

>>152
うまくいきました!ありがとうございました。

154:デフォルトの名無しさん
11/10/14 19:58:12.44
set a=!?-,.、。!?~ー☆#♪
for %%x in (! ? - , . 、 。 ! ? ~ ー ☆ # ♪)do call set a=%%a:%%x=%%
echo %a%

このようにすると「,」と「?」が残ってしまうのですが
その2つも消すにはどうすればよいのでしょうか?
また、これは一体何が原因なのでしょうか?

155:デフォルトの名無しさん
11/10/14 20:12:15.64
エスケープされてないので
,は空白に置換
?は1文字ファイル名に置換

156:デフォルトの名無しさん
11/10/14 23:12:48.73
>>155
最初のsetを""で囲んでforのセットに^?^,でいけるかなと思ったんですが駄目でした。
他も色々と試してみたのですが、うまいことエスケープ出来ませんでした。
forの外ならset a=%a:?=%とset a=%a:,=%でエスケープもいらないのですが
仕組みを理解したいのでもうちょっと調べてみます。よく分かりませんが。
ありがとうございました。

157:デフォルトの名無しさん
11/10/15 00:55:29.25
set a=!?-,.、。!?~ー☆#♪
for %%x in (! ^^? "?" - "," . 、 。 ! ? ~ ー ☆ # ♪ ') do call set a=%%a:%%~x=%%
echo %a%
set a=%a:?=%
echo=%a%
pause

forの()中 ?は "?"はダメで ^^?でエスケープ出来るが %%xに渡してくれない
カレントディレクトリに1文字のファイル置けば一応エスケープされてることが確認できる

158:デフォルトの名無しさん
11/10/15 01:40:23.71
?はエスケープでけん

159:デフォルトの名無しさん
11/10/15 07:59:56.29
>>147
for /d /r c:\test %a in ("*タイトル*") do @echo %a

160:デフォルトの名無しさん
11/10/15 09:06:03.07
>>157>>158
ファイル名に使えない=\|/:*<>は試してませんが
(! ^ ! ? ☆ ★ ♪ # # $ $ ~ - ― < > ー - "," " " " " . ・ 「 」 → 、 ” ’ 。 _ & + / \ ・ + "&" % @ @) do なんかは普通に通りました。後は遅延を考慮した""%%""位が特殊な形でした。
危険そうな所は避けているので他にもあるとは思いますが…これらは成功しました。

それでようやく理解しかけているのですが、例えば?と同じく出来なかった%の置換。
doの遅延で2つで1つ状態なので、セットの段階から%%にして、これに他と同じく
""を付けるのですが、他は%%~xで""を外しても大丈夫だったのですが
これは""を外して置くと特殊文字化するので、再びここで囲み直し
結果的に""%%""と二重で囲んで成功しました。

これは?にも当てはまって、""?""これで無効化された普通文字というのでしょうか
おそらく他もこの仕組みなんだろうと思いました。^自体は^^でした。
アドバイスのおかげで成功出来ました。どうもありがとうございました。

161:デフォルトの名無しさん
11/10/15 09:18:12.11
>>159
forはある程度理解できるようになったと思っていたのですが、全然浅かったです。
ありがとうございます。解読して挑戦してみます。まだgoto文が苦手なんですよね。
おそらくgoto文も使うのでちょっと腰を据えて学んでみます。ご紹介ありがとうございました。

162:デフォルトの名無しさん
11/10/15 14:22:35.26
set a=%%%!?-,.
echo %a%
for /f %%a in ('echo "%a%"') do @echo %%~a
for /f %%a in ('echo %a%') do @echo %%a
for /f %%a in ("%a%") do @echo %%a
pause

面白いなw

163:デフォルトの名無しさん
11/10/15 14:34:34.66
スレリンク(tech板:32番)
32 名前:デフォルトの名無しさん[sage] 投稿日:2011/03/09(水) 04:52:28.96
setlocal enabledelayedexpansion
set o=me
set me=de
set de=to
set to=u
set u=omedetou
set omedetou=^^^>^^^>31 説明しても良いが、何故かもう一回展開できてしまって、この理由が全く説明できないから、展開されるタイミングとか勘違いしてるかもしれんが良いか?
for /f %%A in ( 'call echo %%%%!%o%!%%%%' ) do call echo %%!%%A!%%
endlocal

164:デフォルトの名無しさん
11/10/15 14:44:44.95
>>162
どこが?当たり前だのクラッカだが?

165:デフォルトの名無しさん
11/10/15 14:48:55.47
スレリンク(tech板:45番)
45 名前:デフォルトの名無しさん[sage] 投稿日:2011/03/09(水) 22:13:30.35
>>43
んじゃ、このバッチで復習を

setlocal enabledelayedexpansion
set o=me
set me=de
set de=to
set to=u
set u=omedetou
set omedetou=おめでとう
for /f %%A in ( 'call echo %%^^^!%%%%!%o%!%%%%^^^!%%' ) do call echo %%A
endlocal

166:デフォルトの名無しさん
11/10/15 14:54:44.85
つまらん もちっと珍しいことはないのか?

167:デフォルトの名無しさん
11/10/15 15:28:12.86
ここを見てると、「(PerlやRubyのような)フリーソフトは危ないから導入禁止」
とかほざいてる馬鹿会社が、いかに罪深いかがよく分かるな。
まあ趣味でバッチを追究するのは、また別の話だが…

168:デフォルトの名無しさん
11/10/15 15:41:20.39
>>164
いや、ファイル名に%が付いてるのはどうなるかなと思ってね
たいした意味はないよ

169:デフォルトの名無しさん
11/10/15 15:44:12.87
べつにちっともこまらんが?
あるものを使いこなせない馬鹿社員が、いかに罪深いかがよく分かるな。

170:デフォルトの名無しさん
11/10/15 15:47:22.16
>>169
暇な窓際社員は呼んでない

171:デフォルトの名無しさん
11/10/15 17:46:30.61
forのfile setでは?はエスケープできないね
でもfor/fなら?が渡せるよ
URLリンク(scripting.cocolog-nifty.com)
の要領でfor /f in (複数行)にすればよい

172:デフォルトの名無しさん
11/10/16 15:19:28.43
亀レスだけど>>36
これ凄いな・・・職人芸を感じる。
他の言語知らないから普通の事かもしれんが

173:デフォルトの名無しさん
11/10/16 16:17:39.50
set a=!?-,.、。!?~ー☆#♪
set b=! ? - , . 、 。 ! ? ~ ー ☆ # ♪
for /f %%x in ('echo %b: =^&echo %') do call set a=%%a:%%x=%%
echo %a%


174:デフォルトの名無しさん
11/10/16 17:13:39.45
set a=!?-,.、。!?~ー☆#♪
set b=! ? - , . 、 。 ! ? ~ ー ☆ # ♪
for /f %%x in ('"echo %b: =&echo %"') do call set a=%%a:%%x=%%
echo %a%


175:デフォルトの名無しさん
11/10/16 17:34:19.64
何か云えよw

176:デフォルトの名無しさん
11/10/16 17:35:27.55
何か

177:デフォルトの名無しさん
11/10/16 17:37:14.47
これ凄いな・・・職人芸を感じる。

178:デフォルトの名無しさん
11/10/16 22:56:12.18
>>167
windows鯖いじる仕事だったら普通だけど、、
まあ、本番で使ってるのはもっとシンプルなバッチばっかりだけどな。

179:デフォルトの名無しさん
11/10/17 05:53:06.23
2>nul "%cd:\="&set "HIRAGANA=%"

これなにをやってるの?さっぱりわからない…

180:デフォルトの名無しさん
11/10/17 11:34:00.25
set dir=G:\ほげ1\ほげ2\
set dir=%dir:~0,-1%
2>nul "%dir:\="&set "target=%"
echo %target%
pause

フォルダ名を取得してるんじゃない

181:デフォルトの名無しさん
11/10/17 15:36:37.01
%~nxIを使えば済むところを物好きな

182:デフォルトの名無しさん
11/10/17 16:13:38.98
>>181
%~nxIだとカレントディレクトリ名でなく、そこにあるフォルダ名になると思うんだが

183:デフォルトの名無しさん
11/10/17 16:22:55.35
置換の方がfor使って書くより単純だけどな。

ちなみに最後の文字が\だと%~nxiもNGだからね…

184:デフォルトの名無しさん
11/10/17 16:28:36.69
あたま悪いの?

185:デフォルトの名無しさん
11/10/17 16:35:08.24
>>184
頭悪い本人乙

186:デフォルトの名無しさん
11/10/17 16:35:29.48
>>184
あたま良いの?なら書いてみてよ

187:デフォルトの名無しさん
11/10/17 16:36:36.04
for %%I in ("%~dp1.") do set HIRAGANA=%%~nxI

より

cd /d "%~dp1"
2>nul "%cd:\="&set "HIRAGANA=%"

とは物好きな

188:デフォルトの名無しさん
11/10/17 16:37:04.21
まあ待て。本人は頭がいいと思ってるのかもしれないけど、
知らない方がいいってこともある。

189:デフォルトの名無しさん
11/10/17 16:40:29.12
どっからcdなんて出てきたと思ったらえらい昔のレスじゃないか…
安価付けろボケ

190:デフォルトの名無しさん
11/10/17 16:48:52.08
ボケはおまえだけだが?

191:デフォルトの名無しさん
11/10/17 16:51:22.28
>>187
これ凄いな・・・職人芸を感じる。


192:デフォルトの名無しさん
11/10/17 17:11:58.24
>>191
もう許してやれよww

193:デフォルトの名無しさん
11/10/17 17:42:56.14
>>187
あたま悪くてごめんなんだけど
("%~dp1.")これはどうしてdp1の後ろに.がついてるの?

いや確かにこれがないと取得できないんだけど
何かをドロップしなくても"."になって取得できるし
そもそもの"."の意味もよく分からなくって、そこを教えてもらえると嬉しいです。

194:デフォルトの名無しさん
11/10/17 17:58:04.27
>>191
> これ凄いな・・・職人芸を感じる。
一銭にもならん職人芸だけどな。

195:デフォルトの名無しさん
11/10/17 18:02:09.59
dir .
すると
.
..
があるだろ?
a\b\c\.はa\b\cを指す。
a\b\c\..はa\bを指す。
つまり、\.は\.を削除、\..は\~\..を削除したものと同じ
というのがOSのパス名のコンベンションなんだよ

196:デフォルトの名無しさん
11/10/17 18:06:37.06
×職人芸を感じる
○職人技を感じる
と思ってたんだが違うのか?
それでネタにされてたんだと思ったがw

>>193
横レスで俺もよく分からんけど"."でカレントディレクトリを1つ上位のパスに戻してるんじゃないのか?
例えばcd ..だと1つ前に戻るけど、forの場合には1個でいいみたいな。試しに".."だと2つ前に戻った。

>>195
なるほど㌧

197:デフォルトの名無しさん
11/10/17 18:29:39.96
>>195
dirをしたときの.と..もずっと意味分かってなくて
今までは仕方なくそれを含めて計算してたんですが
なるほど、ようやく意味が分かりました。ありがとうございました!

>>196
ありがとうございます。試してみます。

198:デフォルトの名無しさん
11/10/19 20:12:37.19
FOR文の中にGOTOのラベルって書いたらNGですか?

FOR /f "usebackq tokens=*" %%j IN (`reg query "HKLM\System\CurrentControlSet\Services\Tcpip\Parameters\Interfaces"`) DO (
IF "! REG.EXE VERSION 3.0" EQU "%%j" goto Skip
IF "HKLM\System\CurrentControlSet\Services\Tcpip\Parameters\Interfaces" EQU "%%j" goto Skip

処理色々
:SKIP
)
こんな感じでかいたらエラーになっちゃいます。

199:デフォルトの名無しさん
11/10/19 20:15:32.28
gotoは書けるが、ラベルは複文の中に書けない
つまり脱出のみ

200:デフォルトの名無しさん
11/10/19 20:43:35.56
IF "! REG.EXE VERSION 3.0" NEQ "%%j" (
 ...
)
でいいんじゃないの。
インデント増えるけど。

ややこしい処理書きたくなったら
for %%i ... do call :eachline %%i
してサブルーチンに飛ばしちゃうと色々楽。

201:デフォルトの名無しさん
11/10/19 21:57:06.94
>199
>200
なるほど~、勉強になりました。
ありがとうございます。

202:デフォルトの名無しさん
11/10/23 17:43:31.29
ちょっと教えてください

あるディレクトリ以下のファイルを処理したくて、とりあえず
dir /b /s /a-d cd > list.txt
でファイル一覧を作りました

中身はこんな感じ
test\test11 test12\texta
test1\test13 test14\textb
test2\test15 test16\textc

で、その一覧をforで処理しようと思ったら、空白までしか読んでくれない
for /F %i in ( list.txt ) do コマンド

どうしたらファイルの中の空白を含む文字列を正しく読み込めますか?


203:デフォルトの名無しさん
11/10/23 17:48:11.55
いったんファイルに吐いているのは、多少加工するためです
前と後ろを少し切るためなんですが、コマンドでやると面倒そうなので、
エディタの置換でやっています

204:デフォルトの名無しさん
11/10/23 17:53:37.29
自己解決しました
for の /Fが余計だった
頭使わずにコピペしてると駄目ですね
スレ汚し失礼しました

205:デフォルトの名無しさん
11/10/23 18:16:44.27
何言ってんだか

206:デフォルトの名無しさん
11/10/25 09:41:38.83
学校で宿題が出ました、助けて下さい><
実行すると下記のような動作をするバッチファイルスクリプトを作成したいです。
よろしくお願いいたします。

実行するバッチファイルが現在存在するディレクトリにある全てのテキストファイルを書き換えるバッチを作成しなさい。
テキストファイルの中に、pass = "C:\Users\users\Documents\workspace\test.txt"というような
パスを変数に代入する記述があった場合
そのパスの部分を、pass = "現在のバッチファイルの存在するディレクトリ\test.txt"
という風にディレクトリ名だけを(ファイル名は書き換えない)書き換えるバッチを作成しなさい。

207:デフォルトの名無しさん
11/10/25 10:21:55.23
>>206
hh.exe ms-its:ntcmds.chm::/ntcmds.htm

208:デフォルトの名無しさん
11/10/25 11:07:34.88
少しは考慮に値するレベルならまだしも、一行で終わるようなのはもう帰れとしか言いようがない。

209:デフォルトの名無しさん
11/10/25 22:23:47.19
1行じゃ終わらんでしょ

210:デフォルトの名無しさん
11/10/25 22:25:49.99
仕様があいまいで書く気にならんな

211:デフォルトの名無しさん
11/10/25 22:30:56.11
語句解析とか無理

212:デフォルトの名無しさん
11/10/25 22:33:49.07
> 現在存在するディレクトリにある全てのテキストファイル
えっ?

213:デフォルトの名無しさん
11/10/25 22:39:45.43
>>212
現在バッチファイルが存在するディレクトリ
バッチファイルと同階層のディレクトリ内の

214:デフォルトの名無しさん
11/10/25 23:37:14.09
助けなかったらどうなるの?

215:デフォルトの名無しさん
11/10/25 23:54:16.44
つまりバッチファイル自身も書き換えるのか

216:デフォルトの名無しさん
11/10/25 23:56:59.44
>>215
拡張子がtxtのものだけでお願いします。

217:デフォルトの名無しさん
11/10/26 00:06:34.90
そのまま解釈すれば
バッチでは無理なレベル

218:デフォルトの名無しさん
11/10/26 00:13:41.08
バッチの宿題やるまえに日本語の勉強しなきゃ

219:デフォルトの名無しさん
11/10/26 00:45:50.58
なの宿題のわけないが狙いは何だ?

220:デフォルトの名無しさん
11/10/26 00:49:53.39
バッチではできないが正解でわ

221:デフォルトの名無しさん
11/10/26 01:05:34.80
説明がわかりにくいようですまんかった。
画像にしてみた。
URLリンク(up3.viploader.net)
URLリンク(viploader.net)
画像の、C:\aaa\aaa\aaa\aaaとかの部分をC:\Users\workspaceに書き換えたいというわけです。

>>217>>220
バッチではムリなのか・・・
最初Pythonでやろうと思ったんだが、うちの会社のマシン、標準でPythonが入ってないから
わざわざこれやるためにインスコするのも何だしなあと思って
バッチならどのマシンでも実行出来るかなと思ったんだが・・・。
何か他に最適な言語はありますか。

>>219
パスを読んでくるようなスクリプトを他のディレクトリに移動させるとエラーが出ることがあって
今は毎回パスを手動で書き換えたりしてるんだけど、ボタンポチで書き換えられた方がいいかなあと。。
プログラム板は宿題スレが多いからこういう形で質問してみました。

222:デフォルトの名無しさん
11/10/26 01:23:34.64
それくらいならバッチでできるだろ
for/?
set/?
規模見積もり0.005KS
工数見積もり0.002人月

223:デフォルトの名無しさん
11/10/26 03:39:47.92
だからキモの部分は1行で終わるって…

224:デフォルトの名無しさん
11/10/26 03:45:15.11
無理だって

225:デフォルトの名無しさん
11/10/26 04:02:35.67
出来るよ
passはpathの間違いか?まあ変数名なのでどっちでもいいが。
ただ2枚目の画像のようにtxtの中身がpathを記述したものだけなのか?それ以外の行があるのか?
ひとつの行で指定されているpathはひとつのみ?;区切りで複数のpathが指定されてたりするのか?
によって面倒さが変わってくる

226:デフォルトの名無しさん
11/10/26 04:07:57.60
相対パス使えよ

227:デフォルトの名無しさん
11/10/26 04:13:52.72
何が無理なんだ?バッチに不可能はないが

228: ◆GisVTRdvfxOl
11/10/26 04:47:39.91
URLリンク(www1.axfc.net)
txt書式が変わると対応不可
エスケープ文字は非対応
スペースと日本語には対応させたつもり

229:デフォルトの名無しさん
11/10/26 05:16:38.97
>エスケープ文字は非対応
バッチの宿題やるまえに日本語の勉強しなきゃ


230:デフォルトの名無しさん
11/10/26 16:31:13.72
WinTabberって良さげなツール見つけたんだけど
AVGでWin32/Heurが検出される。
たぶん誤検出で大丈夫だと思うんで試しに誰か踏んでみてくれ。

231:デフォルトの名無しさん
11/10/26 16:45:25.13
断る

232:デフォルトの名無しさん
11/10/26 19:18:03.62
>>バッチならどのマシンでも実行出来るかなと思ったんだが・・・。
この条件なら WSH 使えばいい話

233:デフォルトの名無しさん
11/10/26 19:28:24.00
>何か他に最適な言語はありますか。
WSHは言語じゃない


234:デフォルトの名無しさん
11/10/26 19:35:38.57
そんなこといったらバッチファイルも言語じゃないだろ

235:デフォルトの名無しさん
11/10/26 20:02:33.21
>>234
じゃバッチファイルの言語はなんだ?言ってみろ

236:デフォルトの名無しさん
11/10/26 21:14:32.23
バッチ

237:デフォルトの名無しさん
11/10/26 22:01:34.34
バッチは基本的にコマンドの羅列でしかないので厳密には言語じゃないけど、
一般的には言語(スクリプト)として扱われることが多い・・・てことじゃない?
unixのシェルスクリプトも同じ扱い。

238:デフォルトの名無しさん
11/10/26 22:48:51.96
>>228
thx!!!!!ありがとうございます!!
バッチファイルを今まで書いたことなかったので
お願いしたのだけれど、やっぱり機能追加とかしたいので結局自分でも覚えなきゃいけないな・・・
仕事でバッチを頻繁に使うわけでもないので若干面倒臭い。。
>>232>>233
すみません、語彙力不足で・・・。
上でお願いしたようなことが出来るのなら言語じゃなくても何でも良いです。
ただ共有して使うつもりなのでインストールとかが必要なものは面倒なので要らない感じです。
WSHってのでバッチよりサクッと出来るならその方が個人的には嬉しいです。

239:デフォルトの名無しさん
11/10/26 23:23:21.05
最近スレの質が下がったな
日本語変なやついるし
検証もしないで出来ないとか無理とかいうやついるし
全角英字とか()

240:デフォルトの名無しさん
11/10/26 23:35:01.96
出来ないというか普通はsedとか使うんじゃないの

241:デフォルトの名無しさん
11/10/27 00:32:18.73
>>239
出来ると思うならやってみろよ

242:デフォルトの名無しさん
11/10/27 08:41:46.72
出来ると思うならやってみろよ(キリッ

243:デフォルトの名無しさん
11/10/27 17:46:44.38
どうでみいいから好きにしてよ(キリッ

244:デフォルトの名無しさん
11/10/27 23:02:47.57
出来ないと思うなら証明してみろよ(キリッ


245:デフォルトの名無しさん
11/10/27 23:39:38.13
うちも履歴が止まったが保存日数減らしたら再開したわ

246:デフォルトの名無しさん
11/10/28 00:15:34.97
このスレはあなたにとって役に立ちましたか?

 ○ 非常に役にたった
 ○ 役にたった
 ○ どちらともいえない
 ○ 役に立たなかった
 ○ 全く役にたたなかった

247:デフォルトの名無しさん
11/10/28 01:56:16.55
非常に腹がたった

248:デフォルトの名無しさん
11/10/28 11:58:38.57
ユーザー名がtestであるときに
cd C:\Users\testと打たないで
cd /~test見たいな感じでC:\Users\testに移動できる書き方ってありませんか?

249:デフォルトの名無しさん
11/10/28 12:13:54.46
エスパー回答
cd %USERPROFILE%\test

250:デフォルトの名無しさん
11/10/28 12:42:02.05
宇宙飛行士じゃないけど
cd /d %USERPROFILE%

251:デフォルトの名無しさん
11/10/28 12:53:08.99
ありがとうございます!

252:デフォルトの名無しさん
11/10/28 13:01:01.75
pushd使え

253:デフォルトの名無しさん
11/10/28 13:04:50.44
pushdとpopdっていうのがあるんですね
これ便利ですね!ありがとうございます!

254:デフォルトの名無しさん
11/10/31 06:25:29.84
hogehogeという名前のフォルダを右クリックの「送る」に登録したバッチファイルに送ると、
WinRARで圧縮すると同時に圧縮したファイル名の先頭にその時の日付と時刻を
「(yy-mm-dd_hh-nn) hogehoge.rar」
このように追加したいのですがどういう書き方をすれば良いでしょうか?

255:デフォルトの名無しさん
11/10/31 07:16:57.68
cd /d "%~dp1"
set "ymdhm=%date:~2,2%-%date:~5,2%-%date:~8,2%_%time:~0,2%-%time:~3,2%"
set "path=%path%;C:\Program Files\WinRAR"
winrar a "(%ymdhm%) %~nx1.rar" "%~nx1"

256:デフォルトの名無しさん
11/10/31 10:14:55.58
"C:\Program Files\WinRAR.exe" a -ag+{(}YY-MM-DD_HH-MM{) } "%~1"

257:デフォルトの名無しさん
11/10/31 11:03:26.79
7-zipを使っております
c:\code\の中のファイルで新しく更新されたファイルのみを
c:\backup.7zに追加・更新したいのですが
それを手動でやってたのですがバッチファイルでこういうのをクリックしたら自動的にできるようには出来ませんか?

258:デフォルトの名無しさん
11/10/31 12:56:16.55
hh.exe ms-its:C:\Program Files\7-Zip\7-zip.chm::/cmdline/syntax.htm

259:デフォルトの名無しさん
11/10/31 15:06:31.79
>>255
完璧に動きました。
バックアップ用に使います。最高です。
ありがとうございました。

>>256
WinRAR自体に日付と時刻をファイル名に付加するパラメータがあったんですね。
ありがとうございます。

260:デフォルトの名無しさん
11/10/31 15:51:50.41
>>259
pushd "%~dp1"
"C:\Program Files\WinRAR\WinRAR.exe" a -ag+(YY-MM-DD_HH-MM) " %~nx1.rar" "%~nx1"

261:デフォルトの名無しさん
11/11/02 11:18:59.37
Windows8でコマンド使おうとすると
いつまでバッチ使ってるんだPowerShell使えやって警告が出るみたいだな
Windows9あたりでcmdは廃止になるかもしれないな

262:デフォルトの名無しさん
11/11/02 18:19:04.70
なんのために?

263:デフォルトの名無しさん
11/11/02 18:30:20.91
PowerShellってvista以降なら標準で入ってるものですか?
もし標準で入っているならPSに移行してみたいですが

264:デフォルトの名無しさん
11/11/02 20:34:51.75
>>261
mjd?batしか使かった事ないし腹立ってきた。
PowerShellとか難しそう

265:デフォルトの名無しさん
11/11/02 20:36:13.45
エディションによる

266:デフォルトの名無しさん
11/11/02 22:04:24.96
homeエディションなら問題ないですかね?

267:デフォルトの名無しさん
11/11/02 22:38:42.34
homeエディションなら問題なく入ってない

268:デフォルトの名無しさん
11/11/03 13:11:33.76
バッチファイルのソースによく書かれている
nx~~とかってどういう意味ですか?変数とは違うものなんでhそうか
あと~~みたいな上の方に出てるニョロニョロと、dpってやつが何者なんでしょうか。
初心者の質問ですみません・・・。

269:デフォルトの名無しさん
11/11/03 13:54:52.82
ntcmds.chmのバッチ パラメータを使用するを読むんだ

270:デフォルトの名無しさん
11/11/03 15:43:44.64
batファイルを為まくってたのに努力が水の泡になる困った
PSに移行するべきかRubyとかPerlとかPythonを使うべきか

271:デフォルトの名無しさん
11/11/03 15:46:05.16
>>270
ほんとそうだよな。せっかく今まで覚えてシコシコ作りまくってたのに
腹立つわマジで

272:デフォルトの名無しさん
11/11/03 16:26:22.70
command.comはなくなるだろうが、cmd.exeがなくなるものか、あほども

273:デフォルトの名無しさん
11/11/03 16:41:16.63
>>269
バッチファイル初心者だから、ntcmds.chmって何だろうと思って
調べてみたんだが、コマンドのヘルプみたいなもんか。
Win7では日本語のヘルプは無いらしい・・・。
本当にPowerShellっての覚えた方が良いってことか
URLリンク(d.hatena.ne.jp)

274:デフォルトの名無しさん
11/11/03 16:43:43.01
俺もRuby,Perl,Pythonで書きたいところなんだが
会社のマシンってこいつらが標準でインスコされてないことがあるんだよな…

275:デフォルトの名無しさん
11/11/03 16:49:09.86
>>274
「ウィルスの危険性があるので導入は認めませんキリッ」(by糞管理部門)

276:デフォルトの名無しさん
11/11/03 16:49:35.83
>>272
どういうことですか?
2つはOSによって名前が違ってますが片方がはいっているものではないのですか?
なくならないんですか?

277:デフォルトの名無しさん
11/11/03 16:50:31.25
プログラミングできない人が多い会社(おれ以外プログラミングってなに?レベル)の場合HSP導入するべき?

278:デフォルトの名無しさん
11/11/03 17:06:34.98
>>277
HSPはあくまでゲーム製作用スクリプトの趣が強いかと
とりあえずはWSH辺りが相場なんじゃないかね

279:デフォルトの名無しさん
11/11/03 17:37:56.28
>>273
for /?

280:デフォルトの名無しさん
11/11/03 18:01:03.13
>>276
command /?

281:デフォルトの名無しさん
11/11/03 18:45:15.02
WSHってPower shellに置き換えられる過去の遺産になるんじゃないっけ

282:デフォルトの名無しさん
11/11/03 18:48:03.85
すれ違い

283:デフォルトの名無しさん
11/11/07 07:08:39.26
ちょっと変な質問ですが

start myprog
のコマンドはstartですが
myprog
でmyprogを実行する(暗黙の)コマンド名ってなんて言うんでしょう

別のスクリプトで
start("myprog") => start myprogを実行する
と一緒に
s = exec("myprog") => myprogを実行して出力を返す
s = run("myprog")
と言ったメソッドを定義したいんですがその名前は何がいいのかなと

284:デフォルトの名無しさん
11/11/07 08:15:27.21
>>284
大雑把な説明だけど。

myprogがOSからみて実行ファイル(.exe、.com(笑)等)であればOSのプロセス管理機能の
管轄で実行されるので、特に暗黙のコマンドというものはない。

myprogがデータファイル(.txt等)であれば、OSに登録されている拡張子割当を元に
該当プログラムに"myprog"をパラメータとして勝手に渡して実行してくれる。
拡張子に割り当てられたプログラムが暗黙のコマンドになる。
(バッチファイルもこのパターンに相当する)

どちらの場合もstartコマンド有無は特に関係ない。
後者のパターンで"start myprog"を実行した場合でも、startコマンド実行後myprogに割り当てられた
プログラムが起動してmyprogがパラメータとして渡されるので、この場合も「暗黙のコマンド」が存在することになる。

拡張子割当の検索はバッチの範疇では無理・・・だと思う(レジストリを見なきゃならん)。

見当違いなことを言っていたらごめん。

285:デフォルトの名無しさん
11/11/07 09:24:59.10
拡張子割り当てはassocとかftypeとか?

286:デフォルトの名無しさん
11/11/07 15:57:27.19
>>284
アンカミス
見当違い

>>283
>start myprog
>のコマンドはstartですが
の引数もコマンドです。
>myprog
>でmyprogを実行する(暗黙の)コマンド名ってなんて言うんでしょう
myprogです。

287:デフォルトの名無しさん
11/11/07 19:08:03.54
>>284
callだよーん

288:デフォルトの名無しさん
11/11/07 19:17:40.95
C:\doc1.0\bin
C:\doc2.0\bin
という二つのパスがあります
このうち前者のほうをシステムのパスに登録しているのですが
batファイルでパスを後者に切り替えるにはどう書くのでしょうか?

289:デフォルトの名無しさん
11/11/07 19:21:27.08
set path=%path:C:\doc1.0\bin=C:\doc2.0\bin%

290:デフォルトの名無しさん
11/11/07 19:31:54.97
289様ありがとうございます

pathはC:\doc1.0\bin以外にもjavaなどのパスやらインストールしたソフトが勝手に登録したパスもありますが
ご教示いただいたコードのC:\doc2.0\binの部分にそれらを足したほうがいいのでしょうか?
それともC:\doc1.0\binというパスを見つけたらC:\doc2.0\binに置換するという動作でしょうか?

291:デフォルトの名無しさん
11/11/07 19:59:48.22
set /?

292:デフォルトの名無しさん
11/11/18 17:54:49.91
batファイルを起動してから毎時00分に指定したdosコマンドを実行したいのですがタスクスケジューラを使わずにbatファイルでできますか?

293:デフォルトの名無しさん
11/11/18 18:09:19.93
%TIME%の分を取り出して比較して
これを繰り返せばよい
適当に待ちを入れて

294:デフォルトの名無しさん
11/11/18 22:44:52.61
:loop
sleep 60-現在の秒数
タスクを実行
goto loop

295:デフォルトの名無しさん
11/11/18 23:04:41.04
'sleep' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。

296:デフォルトの名無しさん
11/11/18 23:09:40.73
waitfor sleep /t 60-現在の秒数

297:デフォルトの名無しさん
11/11/18 23:12:44.67
'waitfor' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。

298:デフォルトの名無しさん
11/11/18 23:25:22.75
msg %username% /time:60-現在の秒数

299:デフォルトの名無しさん
11/11/18 23:38:21.08
送信するメッセージを入力してください。メッセージの入力を終了するには、改行してか
ら、Ctrl+Z キー、Enter キーを押します。

300:デフォルトの名無しさん
11/11/18 23:38:48.90
送信するメッセージを入力してください。メッセージの入力を終了するには、改行してか
ら、Ctrl+Z キー、Enter キーを押します。

^Z
セッション名の取得エラー 1702

301:デフォルトの名無しさん
11/11/18 23:55:48.28
msg * /time:60-現在の秒数 sleep


302:デフォルトの名無しさん
11/11/19 00:18:03.47
セッション名の取得エラー 1702

303:デフォルトの名無しさん
11/11/19 00:34:43.64
:loop
if not 60-現在の秒数 == 00 goto loop
タスクを実行
:loop2
if 60-現在の秒数 == 00 goto loop2
goto loop


304:デフォルトの名無しさん
11/11/19 00:46:53.69
コマンドの構文が誤っています。
コマンドの構文が誤っています。
コマンドの構文が誤っています。
コマンドの構文が誤っています。
コマンドの構文が誤っています。
コマンドの構文が誤っています。
コマンドの構文が誤っています。
コマンドの構文が誤っています。
コマンドの構文が誤っています。
コマンドの構文が誤っています。
コマンドの構文が誤っています。
コマンドの構文が誤っています。
コマンドの構文が誤っています。
コマンドの構文が誤っています。
コマンドの構文が誤っています。
コマンドの構文が誤っています。
コマンドの構文が誤っています。
コマンドの構文が誤っています。
コマンドの構文が誤っています。
コマンドの構文が誤っています。
コマンドの構文が誤っています。
コマンドの構文が誤っています。
コマンドの構文が誤っています。
コマンドの構文が誤っています。
コマンドの構文が誤っています。

305:デフォルトの名無しさん
11/11/19 00:48:02.09
役立たずばかりだな

306:デフォルトの名無しさん
11/11/19 00:50:05.81
おまえの役に立ってたまるかぼけ

307:デフォルトの名無しさん
11/11/19 01:00:26.80
おれんちはsleepあるからいいよw

308:デフォルトの名無しさん
11/11/19 19:30:14.31
1秒スリープ
echo WScript.Sleep(1000) >sleep.vbs
cscript //Nologo sleep.vbs

309:デフォルトの名無しさん
11/11/19 20:33:07.77
>>294
>>296
osのバージョンによっては入っていないんだな
>>301
セッション名の取得エラーって知っているか?
>>303
アホか負担が高すぎる
>>307
何も解決してない答えだな
汎用性がないわ
>>308
これは使えるな

310:デフォルトの名無しさん
11/11/19 23:24:06.28
厳密じゃなくて適当に1秒待ちで良いなら
ping -n 2 127.0.0.1 1>nul

OS制限はまず無いし

311:デフォルトの名無しさん
11/11/20 00:06:16.93
start /wait "" mshta vbscript:Execute("GetObject(""winmgmts:{impersonationLevel=impersonate}"").
ExecNotificationQuery(""select * from __InstanceModificationEvent
where TargetInstance isa 'Win32_LocalTime'
and TargetInstance.Minute = 0 and TargetInstance.Second = 0"").NextEvent:Close")

312:デフォルトの名無しさん
11/11/20 00:15:53.25
pingは環境によってFWでブロックされて止まってしまう

313:デフォルトの名無しさん
11/11/20 00:24:34.55
アホには>>303がちょうどよいw

314:デフォルトの名無しさん
11/11/20 00:41:31.13
mshta javascript:setTimeout('close()',10000)

315:デフォルトの名無しさん
11/11/20 10:04:22.81
そもそも最初は、「毎時00分に」なのに「00秒に」と誤解した上に、途中から「1秒待ち」の話になってる。
へぼプログラマがバグを作りこむ理由の一端がわかった気がする。

316:デフォルトの名無しさん
11/11/20 15:37:58.48
応用のできないアホはスルーで

317:デフォルトの名無しさん
11/11/20 15:40:21.60
msまで追求するのが漢道

318:デフォルトの名無しさん
11/11/20 16:12:00.10
>>315
へぼプログラマがバグを作りこむ理由の一端がわかった気がする。

319:デフォルトの名無しさん
11/11/20 17:19:17.93
>>316
応用? 00分の検出と、1秒待ちってぜんぜん違う機能だぞ。

どう応用するのか、見せてもらえるかな?

320:デフォルトの名無しさん
11/11/20 17:26:48.84
>>319
なんでその2つを同じ階層で考える?

321:デフォルトの名無しさん
11/11/20 17:32:09.01
応用のできないアホはスルーで

322:デフォルトの名無しさん
11/11/20 17:36:30.86
まぁまぁ落ち着けよお前ら
一番悪いのは>>303なんだから

323:デフォルトの名無しさん
11/11/20 17:50:30.16
>>320
え゛っ、応用じゃないの? (w

応用見せてみと言うと階層が違うとか、なんだかねぇ。

324:デフォルトの名無しさん
11/11/20 18:00:38.70
おい単芝vipに帰れよ

325:デフォルトの名無しさん
11/11/20 18:21:54.10
HP機だと
c:\hp\bin\sleep.exe
が使えるよ

326:デフォルトの名無しさん
11/11/20 18:25:01.24
>>324
お前が帰れよ、つーかででくんな。

327:デフォルトの名無しさん
11/11/20 18:32:56.02
powershell start-sleep

328:デフォルトの名無しさん
11/11/20 18:42:28.32
'powershell' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。

329:デフォルトの名無しさん
11/11/20 18:43:43.94
'c:\hp\bin\sleep.exe' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。


330:デフォルトの名無しさん
11/11/20 19:01:18.78
hpの事なんて聞いてねえよ!

331:デフォルトの名無しさん
11/11/20 19:05:48.99
おまえなんかに言ってないよw
自我肥大するんじゃねーよw

332:デフォルトの名無しさん
11/11/20 23:10:10.73
自我肥大はスルーで

333:デフォルトの名無しさん
11/11/20 23:18:48.73
pause /t:n

334:デフォルトの名無しさん
11/11/20 23:59:17.74
>>292
やったな、おい!大漁じゃねーか!雑魚ばっかりだけど!

335:デフォルトの名無しさん
11/11/21 00:35:05.56
これってそんなに難しい質問なのか

336:デフォルトの名無しさん
11/11/21 00:45:48.84
応用のできないアホには

337:デフォルトの名無しさん
11/11/21 03:33:48.01
choice /t 10 /d y

338:デフォルトの名無しさん
11/11/21 03:47:51.65
diskpart /t 15

339:デフォルトの名無しさん
11/11/21 05:32:44.27
>>333
続行するには何かキーを押してください . . .
>>337
'choice' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。
>>338
DiskPart はパラメータを処理できませんでした。
詳細については、'diskpart /?' を使用してください。

340:デフォルトの名無しさん
11/11/21 09:26:48.83
cmd.exe組み込みコマンドと同名のプログラムがPATH中に存在するとき、
組み込みコマンドを指定する方法はありますが?
mkdirはmdに変更することで逃げられますが、この方法が使えないとき
はどうすればいいでしょうか?

341:デフォルトの名無しさん
11/11/21 13:42:17.35
似たような機能のtoolを入れる

342:デフォルトの名無しさん
11/11/21 14:41:11.23
>>340
うそこけ 組み込み優先でないってか?

343:デフォルトの名無しさん
11/11/21 16:03:37.77
>>341
それすると何がどうなるって?ばかか

344:デフォルトの名無しさん
11/11/21 16:30:39.06
>>340
逆ならいくらでもあるが

345:デフォルトの名無しさん
11/11/21 16:39:27.54
>>340
setlocal
set path=
組み込みコマンド
endlocal

346:デフォルトの名無しさん
11/11/21 17:28:38.33
>>342
うーん。試してみたらコマンドプロンプトは組み込み優先でした。
実はnmakefileの中だったのです。>>345を採用することにしますた。

set path= & 組み込みコマンド

347:デフォルトの名無しさん
11/11/21 17:35:24.19
最初からそう言え
cmd /c 組み込みコマンド

348:デフォルトの名無しさん
11/11/21 22:14:14.00
timeout /t 10

349:デフォルトの名無しさん
11/11/22 06:18:57.26
NDWord: /t

350:デフォルトの名無しさん
11/11/22 10:59:35.06
'NDWord:' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。

351:デフォルトの名無しさん
11/11/22 12:48:26.59
整合性レベルの低で起動する簡単な方法ないですか?

352:デフォルトの名無しさん
11/11/22 12:57:18.84
%~tIは更新日時のようですが、作成日時は取れないんですか?

353:デフォルトの名無しさん
11/11/22 13:30:43.72
start /low

354:デフォルトの名無しさん
11/11/22 13:56:05.67
for /f "usebackq tokens=1,2*" %i in (`dir /tc "%~f1"^|find "%~nx1"`) do (set a=%i%j&call echo %a%)

355:デフォルトの名無しさん
11/11/22 14:04:16.98
%i%jじゃ繋がっちゃうだろ

356:デフォルトの名無しさん
11/11/22 21:16:09.49
"%~nx1"が"ファイル"だとだめだろ

357:デフォルトの名無しさん
11/11/22 21:24:25.23
"eol= "ってやればうまく行きそうだが、行かん。遺憾だ

358:デフォルトの名無しさん
11/11/22 21:39:46.47
eol=の仕様は謎だな

359:デフォルトの名無しさん
11/11/22 21:46:13.61
findstr /r /c:"^[^ ].*%~nx1"

360:デフォルトの名無しさん
11/11/22 21:59:25.95
for /f "usebackq tokens=1,2*" %i in (`dir /tc "%~f1"^|find "%~nx1"`) do (if not defined a set a=%i %j&call echo %a%)

361:デフォルトの名無しさん
11/11/22 22:05:59.46
だからー "%~nx1"が"ディレクトリ"だとだめだろ

362:デフォルトの名無しさん
11/11/22 22:08:54.13
find "/"
がええかも

363:デフォルトの名無しさん
11/11/22 23:34:25.37
for eolでggったら"delims= eol= "でいいみたいね

364:デフォルトの名無しさん
11/11/23 01:56:38.52
そのじゃディレクトリの作成日時は取れんな

365:デフォルトの名無しさん
11/11/23 12:30:43.59
start cmd /c pause
とすれば、別プロセスで開始したコマンドの終了を待たずに次に進めるけど、
(start cmd /c pause & start cmd /c pause) | sort
などとパイプすると、startしたアプリをすべて終了するまで次に進まなくなってしまうのを回避する方法ありません?
(start cmd /c pause & start cmd /c pause) > hoge.txt
リダイレクトなら普通に次に進めるのですが…

366:デフォルトの名無しさん
11/11/23 16:12:04.51
意味不明だな
(start cmd /c pause & start cmd /c pause) | sort
で止まるのは当然だろw何がしたい?
start cmd /c "pause | sort"
とか?


367:365
11/11/23 17:35:31.29
>>366
確かにそのスクリプトじゃ何がしたいのか意味不明だけど、ようは、

[a.cmd]
Echo 処理1開始
Rem 処理1
Echo 処理2開始
Rem 処理2
Echo 処理3開始
start "" "重い処理3cmd"
Echo 処理4開始
start "" "重い処理.4cmd"
pause
exit /b

ってのがあって、そのスクリプトに対し、

call a.cmd | tee "log.log"

的なことをしたのです。
a.cmd 内では、pause まで進むのにもかかわらず、
重い処理3cmd, 重い処理4cmd が修了するまで、
call a.cmd | tee "log.log"
の次に進みません。

call a.cmd
だけなら問題なく次に進むのだけど、何でそうなるのかが自分にはよくわからんのです。

368:デフォルトの名無しさん
11/11/23 18:33:00.23
こういうこと?
URLリンク(scripting.cocolog-nifty.com)

369:デフォルトの名無しさん
11/11/23 18:45:04.00
>ProcessStartInfo.UseShellExecute=trueでプロセスを起こすと、
>ファイルハンドルを引き継がないようです。
ってことは
ショートカット作って
start "" "重い処理3cmd.lnk"
だな

370:デフォルトの名無しさん
11/11/23 21:55:29.35
rundll32.exe url.dll,FileProtocolHandler "重い処理3.cmd"
でもええんじゃね

371:365
11/11/23 22:04:00.88
>>368-369
ありがとうございます!!

> URLリンク(scripting.cocolog-nifty.com)
> どうもパイプの前のプロセスにパイプのハンドルの複製が残っているのでは?
なるほど…

ショートカットで、ばっちし うまく動きました。

372:365
11/11/23 22:12:02.17
>>370
なるほど!
手っ取り早くてイイですね!

373:デフォルトの名無しさん
11/11/24 20:05:50.79
cmd.exeのバグだな

374:デフォルトの名無しさん
11/11/24 23:51:22.85
そうだな

375:デフォルトの名無しさん
11/12/13 19:02:04.82
hou

窓の杜 - 【REVIEW】UnixのコマンドをWindowsのコマンドプロンプトで利用可能にする「Gow」
URLリンク(www.forest.impress.co.jp)

376:デフォルトの名無しさん
11/12/13 21:04:34.69
コマンドプロンプトで使えても、複数行の引数とかで困りそうな…

377:デフォルトの名無しさん
11/12/14 23:05:30.91
お願いします。
Windows7です。

host.txtが

<ホスト名A>,<IPアドレス>
<ホスト名B>,<IPアドレス>

というようなパターンで記載されております。

キーボード入力→入力を変数に格納(%host%)。

・変数%host%と一致する行を、host.txtの1列目から探す、見つかったら一致する行の2列目を変数ipに格納

という処理を行いたいのですが、まったく方法が思いつきません。
お知恵を拝借いたしたく。

よろしくお願いします。

378:デフォルトの名無しさん
11/12/14 23:30:42.76
set /p host="> "
for /f "tokens=1,* delims=," %%a in (host.txt) do (
if "%%a" == "%host%" set "ip=%%b"
)
echo %ip%

379:377
11/12/15 00:03:14.03
>>378
勉強になります。そのまま使わせていただきます。
ありがとうございます。



380:デフォルトの名無しさん
11/12/21 08:11:06.17
Windows2008使用です。
バッチ上から、システム環境変数(本来、マイコンピュータ右クリックでたどっていって編集するもの)を編集したいです。

reg add で編集(追加)はできるんですが、同じバッチ内(コマンドプロンプト内)では、反映されてません。
これを反映させられるようにしたいです。
pathを編集したいわけじゃないので、フルパスにしたからといって解決するものでもないです。

どなたかご存知の方いらっしゃいましたらご教授お願いします。

381:デフォルトの名無しさん
11/12/21 09:34:10.72
>set /?

382:デフォルトの名無しさん
11/12/21 09:58:29.01
馬鹿登場

383:デフォルトの名無しさん
11/12/21 10:26:35.05
reg addしたものと同じものをsetしなおすのが手っ取り早いとは思うけどな。

start "" cmd.exe /c "%~0" %*

とかやって独立したプロセス立ち上げると環境変数って新規のが使われるんだっけ?
そうなったら今度はローカルで変更した環境変数まで消えちゃうんだけど。

384:デフォルトの名無しさん
11/12/21 14:42:17.97
setx/?

385:デフォルトの名無しさん
11/12/21 17:15:10.74
'setx' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。

386:デフォルトの名無しさん
11/12/21 17:59:03.37
setx.exeはServer 2003以降、Vista以降で有効の模様。2000/XPでは使えない。

387:デフォルトの名無しさん
11/12/21 18:26:27.91
2000/XPは使わない。

388:デフォルトの名無しさん
11/12/26 11:08:09.34
すいません以前ここでcdは使うな。代わりに○○を使えって教わったのですがそのコマンドが忘れました
どなたか教えてください

389:デフォルトの名無しさん
11/12/26 11:24:55.46
>>252-253 か?
別にcdでもいいよ

390:デフォルトの名無しさん
11/12/26 11:41:51.36
cd /d
かもよ

391:デフォルトの名無しさん
11/12/26 11:58:44.93
pushdとか?

392:デフォルトの名無しさん
11/12/26 12:45:07.22
>>389-391
先生方ありがとうございます
それです

393:デフォルトの名無しさん
11/12/26 18:39:34.18
hoge_012.txt
hoge_12345.txt
hoge_abcd.txt
みたいなファイル名のファイル群から、hoge部分を消したいんですが
どう書けばいいですか?
ren hoge_*.txt _*.txt
ってやると
_oge_012.txt
_oge_12345.txt
_oge_abcd.txt
とリネームされました
期待する結果は
_012.txt
_12345.txt
_abcd.txt
です

394:デフォルトの名無しさん
11/12/26 22:06:51.92
>>393
ファイル名の先頭のhogeを除去したいなら
for /f "tokens=1,* delims=_" %%a in ('dir /a-d /b ^| findstr /r "^hoge.*_.*"') do (echo "%%a_%%b" "_%%b")
こんな感じかな

ファイル名のどこかのhoge部分を除去したいなら、置換を利用して
for /f "delims=" %%a in ('dir /a-d /b ^| find "hoge"') do (call :renhoge "%%a")
goto :eof
:renhoge
set "name=%~1"
set name=%name:hoge=%
echo "%~1" "%name%"
set name=
goto :eof
こんな感じかな

リネームするときはechoをrenに置き換えてね

395:デフォルトの名無しさん
11/12/26 22:24:34.78
>>394
できました!ありがとう
ワイルドカードで簡単に出来るものだと思ってました

396:デフォルトの名無しさん
11/12/27 16:34:39.16
できるよ

397:デフォルトの名無しさん
11/12/28 01:02:03.81
カレントフォルダにあるすべてのファイルに対して
AABBBtxt→AA-BBB.txt
AACCCtxt→AA-CCC.txt
のように3バイト目にハイフンを入れたいです。
AAは必ず同じ文字列となります。
ren AA* AA-*
としたらAA-BB.txtとなりBが1個きえてしまいました。
どのようにしたらよいでしょうか

398:デフォルトの名無しさん
11/12/28 01:08:57.22
まず
set x=AABBBtxt
をAA-BBB.txtに変えてみな
それができればあとはできるだろ?

399:デフォルトの名無しさん
11/12/28 02:20:05.30
> 3バイト目にハイフンを入れたいです。
set a=%~1
set b=%a:~0,2%-%a:~2%
echo %b%

400:デフォルトの名無しさん
11/12/28 02:22:35.04
> AAは必ず同じ文字列となります。
set a=%~1
set a=%a:AA=AA-%
echo %a%

401:デフォルトの名無しさん
11/12/28 11:18:02.60
batファイルからカラーダイアログを呼び出せることって無理ですか?

402:397
11/12/29 00:13:43.43
>>398-400
ループ処理が難しそうですが、なんとかできそうです。
ありがとうございました。

403:デフォルトの名無しさん
12/01/01 02:26:05.21
mshta "about:<script>function b(){new ActiveXObject('Scripting.FileSystemObject'
).GetStandardStream(1).Write(d.ChooseColorDlg().toString(16));close();}</script>
<body onload='b()'><object id='d' classid='clsid:3050f819-98b5-11cf-bb82-00aa00b
dce0b'></object></body>"|more

404:デフォルトの名無しさん
12/01/05 16:14:43.54
【質問】
 ・1-18までカウントしていく関数(サブルーチン?)を作りたいです。
  調べて自分なりに試しているのですが、上手くいかずに行き詰ってしまいました。
  下記のように、1-9までは01-09のように0を付加して表示したいです。
  01/18
  処理結果
  02/18
  処理結果
【 OS 】
 ・Windows XP Professinal SP3
【構文】
SET /A CNT = 1
SET /A IND = 18

CALL :ZERO %CNT%

:ZERO
IF "%1" LEQ "9" (
SET /A DD = %1
SET /A DD += 100
SET /A ABC = %DD:~-2%
ECHO %DD:~1,2%/%IND%
SET /A CNT+=1
)
EXIT /B

よろしくお願いします。

405:デフォルトの名無しさん
12/01/05 17:07:34.22
> 1-18までカウントしていく関数(サブルーチン?)を作りたいです。
仕様がよくわからん。18超えたらどうするの?
01,02,03,・・・17,18とechoさせたいわけじゃないよね?
処理結果とあるけど、別の処理をループさせてのカウントかな?
だとすればわざわざサブルーチンにしなくても set CNT=101
で101-118をカウントして %CNT:~-2% で表示させればいい

@echo off
set CNT=100
:loop
set /a CNT+=1
echo %CNT:~-2%/18
echo 処理結果
if not %CNT%==118 goto :loop
pause

406:450
12/01/05 18:39:55.01
>>405
レスありがとうございます。
教えていただいた方法でできるようになりました。
どうもありがとうございました!

SQLiteのVACUUMとREINDEXのバッチ作成の際に、01/18: ファイル名.拡張子 と表示して、
現在何個あるうちの何番目を処理中かどうか、というのを表示させたく作成中でした。
その際に、1-9までについては先頭に0を付加したかったのですが、書式的なもののやり方
が分からずにいました。 ※1/18ではなく、01/18のように。

【バッチ内容】
SET ADDONS = addons.sqlite

SET /A CNT = 100
SET /A IND = 18

CALL :loop %CNT% %ADDONS%
REM ここに 01/18: addons.sqlite と表示させたい。
sqlite3.exe ..\..\%ADDONS% VACUUM
sqlite3.exe ..\..\%ADDONS% REINDEX

:loop
SET /A CNT += 1
ECHO %CNT:~-2%/18: %2
EXIT /B


【希望結果内容】
01/18: addons.sqlite

407:404
12/01/05 18:43:23.40
>>404です。
>406の名前欄が間違っていました。
失礼しました。

※教えていただいてできたので良かったのですが、
>>404でなぜうまく動作しないのか謎でモヤモヤが。

どうもありがとうございました。

408:デフォルトの名無しさん
12/01/05 21:09:16.86
>>407
if "12" leq "9" echo 文字列の比較は一桁目から

409:デフォルトの名無しさん
12/01/05 21:11:30.07
×一桁目
○左

410:デフォルトの名無しさん
12/01/08 22:31:16.99
コマンドプロンプト上で
for /L %i in (1,1,10) do @(set /a 123)
とやると
123123123123123123123123123123
と改行挟まずに出力されるんですが、これのメカニズムを誰か説明してください。

411:デフォルトの名無しさん
12/01/08 22:46:19.69
set が改行を剥いでいるんじゃね。

set /P とかで、入力は改行で終了するだろうけど、結果には改行が入っていない方が便利だし。

412:デフォルトの名無しさん
12/01/08 23:14:53.08
setが改行を出さないだけだろ

413:デフォルトの名無しさん
12/01/12 19:02:34.30
:loop
execcommand
sleep 600
goto loop

というループがあって
真ん中あたりでユーザーがその挙動を変えられるようにしたいんだけど
何も入力がなければループを妨げない、
入力があったらキーを set key=? して
call :setoption
するにはどうすればいいでしょう。

414:デフォルトの名無しさん
12/01/12 19:47:08.87
>>413
URLリンク(www.vector.co.jp)
こういうツール使うとか
これがまともに動くかどうかわからないから試してダメだったら
似たようなの探すか、作って配布してくれ

415:デフォルトの名無しさん
12/01/12 20:36:27.20
choice/?

416:デフォルトの名無しさん
12/01/12 22:04:41.80
tomeout/?

417:デフォルトの名無しさん
12/01/12 22:42:42.89
treeを入れるとそのディレクトリのファイルをツリー形式で出力されますが
これに加えてファイル名+サイズ名+最終更新日を出力したいのですが可能でしょうか?

418:デフォルトの名無しさん
12/01/12 23:00:03.63
dir /s を整形するとか。。めんどくさそうだけど。

419:デフォルトの名無しさん
12/01/12 23:03:13.11
vbs とかで作った方が楽かと。

420:デフォルトの名無しさん
12/01/12 23:18:18.22
バッチでは?

421:デフォルトの名無しさん
12/01/13 01:17:12.05
URLリンク(www1.axfc.net)
URLリンク(www1.axfc.net)
こんなのどう
普通にtreeするのに比べるとめちゃくちゃ遅いけど
表示のスタイルは tree /a /f を参考に
ファイルの表示は dir /a-d /t:w を行ごとに

422:デフォルトの名無しさん
12/01/13 05:19:27.39
>>417
URLリンク(www.vector.co.jp)

423:デフォルトの名無しさん
12/01/13 06:58:49.41
>>422
スレチ

424:デフォルトの名無しさん
12/01/13 15:57:19.14
>>415-416
choiceはできそうだけど、timeoutはどう判定すんだ?

425:デフォルトの名無しさん
12/01/13 17:00:32.46
むりぽ

426:デフォルトの名無しさん
12/01/13 22:16:52.32
画面で区別できんだからバッチでもできるっしょ

427:デフォルトの名無しさん
12/01/14 02:31:56.51
だめぽ

428:デフォルトの名無しさん
12/01/15 00:23:57.26
%1に渡したファイルやフォルダがルートにあるのかどうかを判定するのってどう書けばいいですか?
%~1が3文字だったら、とか思いついたけどもっと上手い方法だったり定石があるなら教えてください

429:428
12/01/15 00:25:03.61
訂正します
> %~1が3文字だったら
%~dp1が3文字だったら

430:デフォルトの名無しさん
12/01/15 00:36:58.61
UNCとかにも対応したいなら
set a=%cd%
push ..
set b=%cd%
popd
して比較するとか

431:デフォルトの名無しさん
12/01/15 01:41:37.76
"%~p1" == "\" だとダメなの?

432:デフォルトの名無しさん
12/01/15 09:17:31.43
>>430
ありがとうございます
UNCのことはすっかり失念していました
cdでUNCはカレントに出来ないと言われて困りましたけど
pushd "%~dp1" で勝手にネットワークドライブの割り当てをやってくれて
カレントディレクトリを移すことが出来ました
>>431
それでよかったですよねありがとう


pushd "%~dp1"
if exist "%cd%\%~nx1" (call :ROOTEXP "%cd%\%~nx1") else echo ファイル見つからない
pause
exit
:ROOTEXP
echo "%~1"
echo "%~dpnx1"
if "%~p1"=="\" (echo ルートディレクトリにあるよ) else echo ルートじゃないよ
exit /b

一応、これで意図した動作になりました
ルートにあるファイルやフォルダの場合、echo "%~1" がZ:\\test.txt のように\\となるのですが
正常に動いてるみたいですし、"%~dpnx1"で正しいパスは取れるのですが
この書き方で問題が出るケースはありますでしょうか?

433:デフォルトの名無しさん
12/01/15 20:29:01.37
空きメモリか使用メモリを標準出力でゲットするコマンドないですか。
memはさすがに消滅していたw

434:デフォルトの名無しさん
12/01/15 21:04:49.82
wmic

435:デフォルトの名無しさん
12/01/16 00:29:25.23
tasklistの各行の出力結果を合計してみるとか

436:デフォルトの名無しさん
12/01/16 03:38:43.26
それはねーよ

437:デフォルトの名無しさん
12/01/16 12:21:08.71
wmic調べてみます。ありがとうございました。

438:デフォルトの名無しさん
12/01/16 12:27:17.34
wmic os get freephysicalmemory

439:デフォルトの名無しさん
12/01/16 17:08:24.54
for /f %%i in ('wmic os get freephysicalmemory') do set x=%%i
echo %x%

ECHO は <ON> です。

440:デフォルトの名無しさん
12/01/16 17:35:24.25
for /f "eol=F" %i in ('wmic os get freephysicalmemory') do echo %i

441:デフォルトの名無しさん
12/01/16 17:49:41.37
ECHO は <ON> です。

442:デフォルトの名無しさん
12/01/16 21:14:43.83
for /f "skip=1" %i in ('wmic os get freephysicalmemory') do if not defined mem set mem=%i
echo %mem%

443:デフォルトの名無しさん
12/01/16 23:58:50.04
for /f %i in ('wmic os get freephysicalmemory') do (call set x=%i) & if defined x call set mem=%i
echo %mem%


444:デフォルトの名無しさん
12/01/17 03:36:44.19
'wmic' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。

445:デフォルトの名無しさん
12/01/17 14:12:06.16
Windows 2000以降のOSではWMIが標準で実装されている
Windows 2000にはwmic.exeは用意されていない

446:デフォルトの名無しさん
12/01/17 15:37:33.32
それを言うならXP以降だろw

以降はそれも含むんだから

447:デフォルトの名無しさん
12/01/17 18:17:43.40
win2kはwmiコンポーネント実装済みだけどwmicは同梱されていないって事じゃね?

448:デフォルトの名無しさん
12/01/17 19:55:57.58
それを言うなら>>446阿呆だろw

449:デフォルトの名無しさん
12/01/18 00:35:34.90
xp homeはwmic入ってないのか

450:デフォルトの名無しさん
12/01/22 15:35:57.54
D:\MUSIC\(複数アーティスト)\(各々に複数アルバム)\Resize\Folder.jpg という階層で
Folder.jpgを1つ上のディレクトリに上書き移動して、Resizeフォルダを削除したいのですがうまくできません。
ご教示いただけないでしょうか、一所懸命初めてバッチ書いてみましたがたぶん見当はずれです

cd /d D:\MUSIC
for /d %%A in (*) do (
cd %%A
for /d %%B in (*) do (
cd %%B\Resize
move /y Folder.jpg ..\Folder.jpg
cd ..
rd /s /q Resize
)
)

451:デフォルトの名無しさん
12/01/22 16:36:07.61
>>450
cd /d d:\music
dir /a-d /b /s Folder.jpg >list_fjpg.txt
dir /ad /b /s Resize >list_Resize.txt
処理するファイルが上のリストで問題ないようならこれで出来ると思う
for /f %%a in ('dir /a-d /b /s Folder.jpg') do move "%%~a" ".."
for /f %%b in ('dir /ad /b /s Resize') do rd /s /q "%%~b"

Resizeフォルダ以外にもFolder.jpgがあって上のがダメなら
dir /a-d /b /s Folder.jpg|findstr /e /l /i "\Resize\Folder.jpg" >list_fjpg.txt
これでたぶん大丈夫だと思うけど試してダメだったらfindstrのオプションとか工夫してみて

452:デフォルトの名無しさん
12/01/22 16:36:27.77
cdをpushdやpopdに変えて試してみてね

453:デフォルトの名無しさん
12/01/22 16:49:17.51
>>450
cd /d "D:\MUSIC"
for /d /r %%a in (*) do (
pushd "%%a"
call :movejpg "%%~na"
popd
)
goto :eof
:movejpg
if not "%~1" == "resize" (if not "%~1" == "Resize" goto :eof)
move Folder.jpg ..\
cd ..\
rmdir resize
goto :eof

454:デフォルトの名無しさん
12/01/22 16:51:54.76
jpgを拾うようにした自前のものがよく似ていたので1行目だけ編集したのを貼ってみる。

cd /d D:\MUSIC
for /r /d %%i in (*) do (
if exist "%%i\resize" (
move "%%i\resize\*.jpg" "%%i"
rd /s /q "%%i\resize"
)
)

趣旨が違うかもしれないが。


455:デフォルトの名無しさん
12/01/22 18:06:41.19
>>454のを少し弄って
cd /d D:\MUSIC
for /r /d %%i in (*) do (
if exist "%%i\resize\folder.jpg" (move /y "%%i\resize\folder.jpg" "%%i"&&rd /s /q "%%i\resize")
)
これで質問者の要求仕様を満たすんじゃね?

456:450
12/01/23 09:47:50.42
みなさんありがとうございます!
せっかくなので環境をコピーして4つとも試してみましたがどれもうまくいきました!
バッチファイルが綺麗に完走するのってピタゴラスイッチ的な爽快感がありますね

457:デフォルトの名無しさん
12/01/25 13:55:01.20
2chブラウザのkakikomi.txtを自動で編集して、
日付データと本文部分だけを残すというbatファイルをつくりました

find /v "Subject:" <kakikomi.txt >kakikomi2.txt
find /v "URL :" <kakikomi2.txt >kakikomi3.txt
find /v "From :" <kakikomi3.txt >kakikomi4.txt
find /v "Mail :" <kakikomi4.txt >kakikomi5.txt

というゴリ押しで一応目的は達成できたのですが、時間もかかるし無駄が多い気がします
もっとスマートな書き方もあるのでしょうか?

kakikomi.txt内の書き込みデータは、
--------------------------------------------
Date : 2012/01/01 00:00:00
Subject: スレッドタイトル
URL : URLリンク(...)
From :
Mail :

本文
--------------------------------------------
のくり返しになっています

458:デフォルトの名無しさん
12/01/25 14:34:47.86
findstr/?

459:デフォルトの名無しさん
12/01/25 14:37:22.65
findstr /b /v "Subject: URL FROM MAIL" "kakikomi.txt" >"kakikomi2.txt"
本文の行頭に同じ文字列があったらその行も消えるけど>>457よりはマシと思う

460:デフォルトの名無しさん
12/01/26 14:49:55.56
>>459
ありがとう!次回からは書いてくれたものを使ってみます

461:デフォルトの名無しさん
12/01/27 23:44:16.41
フォルダ内のtest*.batを順に実行したいのですが、10回callする毎に標準出力に
メッセージを出したく思います
↓を実行すると毎回echoが実行されてしまうのですがどう修正すべきでしょうか?

set /a N=1
for /F %%a in ('dir .\test*.bat /b') do (
call %%a
set /a N = %N% + 1
if "%N%"=="10" do (
echo ----------
set /a N=1
)
)


462:デフォルトの名無しさん
12/01/28 00:15:29.97
>>461
echo onで実行されたバッチがどうなってるか見りゃわかるけど…

遅延環境変数でググってみ。

463:デフォルトの名無しさん
12/01/28 00:56:33.67
for /f %%a in ('dir /b test*.bat') do (
call %%a
call :COUNT
)
pause&exit

:COUNT
set n+=1
if %n%==10 (echo ----------&set n=
)
exit /b

464:デフォルトの名無しさん
12/01/28 00:59:13.37
> set n+=1
set /a n+=1

465:デフォルトの名無しさん
12/01/28 09:22:44.38
遅延環境変数のことを失念していました(ノ∀`)
サンプルまで書いていただいてありがとうございます

466: 忍法帖【Lv=5,xxxP】
12/01/28 20:05:08.71
Vista/7などで環境変数を永続的に変えるのってCUI(cmd)じゃできないんですか?
95とかならexec.batをいじるとできるそうですがいい方法無いですかね
マウスでカチカチみんな設定してるの?

467: 忍法帖【Lv=5,xxxP】
12/01/28 20:06:15.39
Vista/7などで環境変数を永続的に変えるのってCUI(cmd)じゃできないんですか?
95とかならexec.batをいじるとできるそうですがいい方法無いですかね
マウスでカチカチみんな設定してるの?

468:デフォルトの名無しさん
12/01/28 20:08:12.26
setx

469:デフォルトの名無しさん
12/01/28 20:37:47.45
autoexec.batだろ

470:デフォルトの名無しさん
12/01/28 20:50:34.72
>>467
GUIだけどキーボードだけで設定ダイアログまで行けるぞ
Windowsキー → 「環境変数」と入力 → 上に「環境変数の設定」が出て来たらEnter

471: 忍法帖【Lv=5,xxxP】
12/01/28 21:30:25.20
Vista/7などで環境変数を永続的に変えるのってCUI(cmd)じゃできないんですか?
95とかならexec.batをいじるとできるそうですがいい方法無いですかね
マウスでカチカチみんな設定してるの?

472:デフォルトの名無しさん
12/01/28 21:43:58.44
>>469-471
>>468で完璧な回答が出てるのに… メクラ?

473:デフォルトの名無しさん
12/01/28 22:00:05.37
exec.batってなんだよ

474:デフォルトの名無しさん
12/01/28 22:02:10.08
>>472
自分で調べる気がないってことでしょ。
スルーでいいよ。

475:デフォルトの名無しさん
12/01/29 22:33:43.17
コンソールで使える日本語TTフォントはMSゴシックしかないの?

476:デフォルトの名無しさん
12/01/30 00:12:38.08
fixed98epsonマジオススメ

477:デフォルトの名無しさん
12/01/30 20:37:29.16
標準で入ってるものではMSゴシックだけ?

478:デフォルトの名無しさん
12/01/31 20:41:10.62
レジストリいじれば好きなTTフォント使える。

HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Console\TrueTypeFont
でググれ

479:デフォルトの名無しさん
12/01/31 21:41:35.10
ほんとかよ 使えなかったが?

480:デフォルトの名無しさん
12/01/31 23:24:15.61
俺は使えてる、XP x64。
レジストリ微妙に何か間違ってるか、プロンプトを間違えているとか?
64bit OS で 32bit の cmd.exe を常用してる?

↓が『64bit OS で 32bit の cmd.exe 』の場合
HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows NT\CurrentVersion\Console\TrueTypeFont


481:デフォルトの名無しさん
12/01/31 23:27:13.38
プッ

482:デフォルトの名無しさん
12/02/01 03:05:05.71
コマンドプロンプトから引数を与えたときはちゃんとaiueo.txt作れるんだけど
ドラッグアンドドロップでやるとaiueo.txtを作ってくれない
どうしたらD&Dで引数受け取ったとき出力をファイルに書き出せる?

aiueo.bat
-------------------
setlocal
set a=aiueo.txt
if not exist %a% (echo Aiueo > %a%)
date /t >> %a%
time /t >> %a%
echo %1 >> %a%
endlocal

483:482
12/02/01 03:12:11.39
ごめんなさい自己解決しました
バッチファイルのあるフォルダじゃないとこに保存されてた・・・

484:デフォルトの名無しさん
12/02/01 04:40:16.31
>%~dp0%a%

485:482
12/02/03 03:10:09.37


486:忍法帖
12/02/05 01:47:02.01
--------終了-------


487:忍法帖
12/02/05 01:47:36.54
--------終了-------


488:デフォルトの名無しさん
12/02/05 03:25:30.09
質問をさせて下さい。
親フォルダにbatを置いて実行し、batの力でそこから子フォルダ、よく孫フォルダ、たまに曾孫
稀により下のバラバラな階層にある複数の最下層フォルダを、順々にカレントディレクトリ
にしたいのですが、どうやればよいのでしょうか?
やりたいことは最下層フォルダにあるファイル数が10個未満の場合に
その最下層フォルダを任意の場所に移動したいのです。

最下層フォルダからの個別移動に関しては最後の削除あたりがうまくいきませんでしたが
それ以外はこのスレを参考にして、なんとか動かすことができました。ありがとうございます。
後は親から複数の最下層フォルダに辿り着ければ何とかなりそうなのですが…
どうか知恵をお貸しください。よろしくお願いします。

個別の処理.bat
for /f %%a in ('dir /a-d ^|find "個のファイル"') do (
echo %%a
if %%a LSS 10 ( call :IDOU ) else ( echo 10個以上ある )
)
exit /b

:IDOU
echo このフォルダ内のファイル数は10個未満
for %%I in ("%~dp1.") do (
md "%%~nxI"
set DNAME="%%~nxI"
move *.* "%~dp0%%~nxI"
move "%~dp0%%~nxI" "C:\Users\XXX\Desktop\移動先\"
cd ..
pause
del "%~dp0%%DNAME:~1,-1%"
)
exit /b

489:デフォルトの名無しさん
12/02/05 05:35:08.76
>>488
カレント配下のディレクトリ全てで最下層であるかどうかの判定

for /d /r %%a in (*) do (
for /f "usebackq" %%b in (`dir /ad "%%a"^|find "個のディレクトリ"`) do (
if %%b==2 (echo "%%a" の下にディレクトリはないよ)
)
)
pause
exit /b

> 最下層フォルダからの個別移動に関しては最後の削除あたりがうまくいきませんでしたが
echo on にしてみれば何が悪いか分かるはず

490:デフォルトの名無しさん
12/02/05 05:35:19.42
>>488
:IDOUをcallするときに引数いれてないけど、:IDOUの中で%~dp1って使う意味はあるの?
それとsetするときはset v="~"じゃなくてset "v=~"ってしたほうがいいと思うよ
そうすれば変数の中にダブルクォーテーションが入らない
delのところも普通に%DNAME%と書けるようになる
ところでdelのところ%の数がおかしいんじゃないか?
削除がうまくいかない原因はそれではなかろうか

最下層の判定は、そのディレクトリ内のディレクトリの個数調べればいいんじゃね
ディレクトリを順に回りたければ
for /d /r %%a in (*) do (pushd "%%a" ~)
とか
for /f "delims=" %%a in ('dir /ad /s /b') do (pushd "%%a" ~)
とか?
こんな感じで実行したところからサブディレクトリを全部回ってくれるんじゃないかな

491:デフォルトの名無しさん
12/02/05 05:40:35.55
レスがかぶっちゃった
delはファイルじゃなくてディレクトリ消したいのか
だったらそもそもdelじゃなくてrmdirにしないと

492:デフォルトの名無しさん
12/02/05 06:14:41.60
>>488
set MVDIR="C:\Users\XXX\Desktop\移動先"

for /d /r %%a in (*) do (
for /f "usebackq" %%b in (`dir /ad "%%a"^|find "個のディレクトリ"`) do (
if %%b==2 (
for /f "usebackq" %%c in (`dir /a-d "%%a"^|find "個のファイル"`) do (
if %%c lss 10 ( move "%%a" "MVDIR" )
))))
pause
exit /b

493:デフォルトの名無しさん
12/02/05 11:23:22.56
実行しなくてもわかる、1個目はリネーム、2個目以降は上書き確認でストップ

494:デフォルトの名無しさん
12/02/05 12:29:44.08
>>489
以前はusebackqも/rも難しく考えて良く分からなかったのですが
このような身に沁みて実用的なアドバイス頂いたお陰で身近な存在になれました。
ググッて他の実用例を見ながら勉強します。ありがとうございます。とても参考になりました。

後はecho onについてなんですが、これは最初の行に@echo onと書くだけで良いのでしょうか?
現在はecho 変数 かアヤシイ直後にpauseでcmd画面の直前を確認する位しか方法が分かりません
初歩的な質問ですみませんが、もしよろしければご指導頂ければ助かります。

>>490
カレントフォルダ名を取得しようとしたforになりますが%~dp0.ですね、失礼しました。
それとsetについてですが、二重の"のうち1つを削る様な場面では有効でしたが
例えばset "v=v&v"とするとecho "%v%"では大丈夫でも%v%ではバグるみたいでした。
もし私のやり方が間違っていたらごめんなさい…けど便利ですね。
これからは使わせて頂きます。最下層判定と合わせてありがとうございました。

495:デフォルトの名無しさん
12/02/05 12:31:41.87
>>491
cdの行を消してrmdir "%~dp0"としてみましたが出来ませんでした。
「プロセスはファイルにアウセスできません。別のプロセスが使用中です。」
との事だったので、そもそもの消すフォルダからbatを実行したのでは難しそうと思い
試しにrmdir "C:\Users\owner\Desktop\移動先\新しいフォルダ"
としてみたら無事に消す事が出来ました。ありがとうございます。

>>492
ありがとうございます!無事に出来ました!
粋な"MVDIR"のお陰でもう忘れないと思います。
後はじっくり解読しながら使いこなせるよう頑張ります。
わざわざ全文書いて頂きどうもありがとうございました。

>>493
>2個目以降は上書き確認でストップ
483では出てきませんでしたが、確かに他の書き方だと出てきました。
てっきり削除確認のY/Nかと思ってましたが上書きだったんですか…
思いもしませんでした。ご指摘どうもありがとうございました。

496:デフォルトの名無しさん
12/02/05 13:04:19.85
>>494
echo %v%でばぐるのかな
これは&を^&に置換するか、
setlocal enabledelayedexpansion
としておいて、echo !v!とかすればちゃんと&も表示されるよ

497:デフォルトの名無しさん
12/02/07 17:07:11.18
置換するにも、遅延しないとできねえよ

498:デフォルトの名無しさん
12/02/09 18:25:43.69
windowsのスタートアップの中でバッチファイルを動かして、他のマシンにマジックパケットを
送りたいんですが、どうもその時点で無線LANが繋がってないようで、対象マシンがWakeUp
してくれません。
バッチ処理を遅延するにはどうしたらよいですか?

499:デフォルトの名無しさん
12/02/09 19:04:48.67
ping -n
timeout

500:デフォルトの名無しさん
12/02/09 21:01:48.95
Vista 以降ならむしろ、スタートアップじゃなくてタスク向きな気がする。

501:デフォルトの名無しさん
12/02/09 21:15:45.22
:loop
ping -n 1 "192.168.0.1"||goto :loop

502:デフォルトの名無しさん
12/02/09 21:29:06.33
powershell -command { start-sleep -s 5 }

なんでWindowsって意地でもsleep標準装備しないんだYO!

503:デフォルトの名無しさん
12/02/09 21:52:33.59
>>502
これ以上Unixからパクるのはプライドが許さないから
なんちてw

504:498
12/02/09 22:27:55.28
みなさま、ありがとうございます。
とりあえず、対象マシンがスリープ状態なので、ping に応答しません

timeout と powershell-command {start-sleep -s 120 }
を試してみたんですが、起動後ならうまく動くんですが、
スタートアップから起動すると、うまく行きません
電文の送信に失敗しました、とか一瞬表示されてパケットは送られていないようです。


505:デフォルトの名無しさん
12/02/09 22:36:54.27
スタートアップだから動かないってことはないだろう
最終行にpause入れて何がどう駄目なのか調べてデバッグするしか

506:デフォルトの名無しさん
12/02/09 22:42:57.44
> 対象マシンがスリープ状態なので、ping に応答しません
無線LAN親機とかデフォルトゲートウェイにpingしてLANが繋がってからマジパケ送ればいい

507:デフォルトの名無しさん
12/02/10 15:18:28.31
システムのパスにbatファイルから一時的に追加する書き方を教えてください

508:デフォルトの名無しさん
12/02/10 15:36:47.43
sex

509:デフォルトの名無しさん
12/02/10 17:29:08.94
set PATH=c:\bin;C:\tool;%PATH%

510:デフォルトの名無しさん
12/02/10 19:16:11.19
path /?

511:498
12/02/10 20:59:56.43
>505,506
そうか、pingは自分のethを試すためだったんですね。
powershellもぐぐってやっと動く用になりました。
ありがとう


512:デフォルトの名無しさん
12/02/11 01:09:40.46
>>502
PowerShellを標準装備するようにしたから、わざわざcmd用に作る必要がないってだけじゃね?
まあたいした手間でも全然ないとは思うが

513:デフォルトの名無しさん
12/02/11 15:44:36.41
質問なんですが、
ping 192.168.0.4 | find "Packets: Sent = 4, Received = 4, Lost = 0 (0% loss)"
echo %errorlevel%

上記をbatで行うと、pingが0%lossでも戻り値が1になってしまいます。

ただ上記のコマンドをプロンプトで実行→echo %errorlevel%で確認すると戻り値は0となります。

これは何故なんでしょうか?


514:デフォルトの名無しさん
12/02/11 15:56:01.63
ローカルにサーバを立ててましてIPが127.0.0.1になります
サーバが動いているかをbatファイルで監視して、サーバが落ちたらbatファイルを終了すると方法を伝授してください

515:デフォルトの名無しさん
12/02/11 15:59:23.21
>>513
バッチファイルにも(0% loss)ってそのまま書いてる?
もしそうなら%を%%にしてやってみて

516:デフォルトの名無しさん
12/02/11 18:21:04.29
>>515
出来ました!ありがとう御座います

でも「0%」だと何かの変数を展開しようとするんですかね?
それを新たに%を付けて文字列として扱う用にしてるとか…

どっちにしろ""で囲んだら変数は展開されないっていう認識だったのでそれも間違いみたいですね…

勉強してきます



517:デフォルトの名無しさん
12/02/11 20:05:54.56
wgetを使ってソフトの最新バージョンをDLできるバッチを作成したいと思ってるのですが
ファイルのリンクがURLリンク(hoge)更新日付/a-z,0-9を含む不規則な文字列/v1.0.0.zip
のような場合で不規則な文字列に対応させるにはどう記述すればいいでしょうか
日付は%date%で置き換えられるのが分かりましたが今回の件で詰まってしまいました・・・

518:デフォルトの名無しさん
12/02/11 20:06:05.33
>>514
@echo off
:pingchk
ping 127.0.0.1 -n 2
if errorlevel 1 goto end
if errorlevel 0 goto pingchk
:end

これで行けるかと
相手先ノードへのping間隔を多くしたいならlocalhostへのpingでsleepにしておけばいいと思います

519:デフォルトの名無しさん
12/02/11 20:35:28.07
@echo off
:re
ping 0.0.0.1||goto re
:end

520:デフォルトの名無しさん
12/02/11 20:47:39.62
for /f "tokens=4 delims=/" %%a in (target.html) do (echo URLリンク(hoge)更新日付/%%a/v1.0.0.zip)

521:デフォルトの名無しさん
12/02/12 01:24:18.48
>>517
直リン or 不規則な部分、の入ったページがあるならそのページをゲットして
URL を抜き出す or フルのURLを生成、すればいいじゃない

522:デフォルトの名無しさん
12/02/12 11:55:51.46
>>518
ありがとうございます!

523:デフォルトの名無しさん
12/02/12 11:59:26.64
>>518
試してみたんですが、動きませんでした
Windowsにapacheを入れてサーバ起動後にbatファイルを起動して、サーバを終了させても batファイルが終了しませんでした

524:デフォルトの名無しさん
12/02/12 12:13:29.84
鯖が生きてるかどうかとpingが通るかは別だろ
もっとまともなスクリプト使ってチェックするか
wgetしてファイルの中身チェックするか
wget URLリンク(localhost) || echo 死んでる

525:デフォルトの名無しさん
12/02/12 13:22:54.48
>>523
@echo off
:pingchk
tasklist | findstr apache.exe
if errorlevel 1 goto end
if errorlevel 0 goto pingchk
:end

526:デフォルトの名無しさん
12/02/12 13:31:34.25
>>520-521
ありがとうございます
for /f "tokens="勉強になりました
調べまくってようやく521さんの答えにたどり着いたとこでした

527:デフォルトの名無しさん
12/02/12 13:52:56.86
>>524
サーバが停止してたら127.0.0.1にアクセスできなくなるのですがこれは通らないものなんですかね?
>>525
プロセスを監視する方法がいいのかもしれません
そのまま実行するとcpu100%になってしまうので1秒スリープをいれたいのですが
@echo off
:pingchk
ping 198.162.0.0 -n 1 -w 1000>nul
tasklist | findstr httpd.exe
if errorlevel 1 goto end
if errorlevel 0 goto pingchk
:end
とやって1秒スリープを入れてるのですがスリープされません
ping 198.162.0.0 -n 1 -w 1000を単品でdosに打つとタイムアウトはしたので存在しないipであります

528:デフォルトの名無しさん
12/02/12 14:31:07.38
>>527
> サーバが停止してたら127.0.0.1にアクセスできなくなるのですが

そのアクセスとはHTTPアクセスであって、応答無くなるのは
それはwebサーバが停止しているだけの話で
PCそのものネットワークが有効か調べるpingとは直接関係ないから。

529:デフォルトの名無しさん
12/02/12 16:47:17.56
ヘタすると、OS死んでても ping 応答する奴すらあるし。

530:デフォルトの名無しさん
12/02/12 22:38:45.91
>>526
おめ

>>527
ちょい外れるけど
198.162.0.0
への ping がキモ過ぎる……


Apache ならサービスで起動しておいてサービスの状態を監視する方がスマートだと思う。

sc <サーバー> query Apache2.2 | findstr "RUNNING" 1>nul 2>&1
if エラーレベル なんちゃら

みたいに。

531:デフォルトの名無しさん
12/02/15 02:49:03.22
テスト
copy a Ā


532:デフォルトの名無しさん
12/02/15 02:52:17.36
Microsoft Windows XP [Version 5.0.2195]
(C) Copyright 1985-2001 Microsoft Corp.

>copy a Ā
Ā was unexpected at this time.

なんでこうなるの?


533:デフォルトの名無しさん
12/02/15 03:05:39.01
>copy a Ă
1 file(s) copied.
これはokなのに…


534:デフォルトの名無しさん
12/02/15 06:17:53.00
codepageは?

535:デフォルトの名無しさん
12/02/15 08:09:38.30
D:\>chcp
現在のコード ページ: 932

D:\>copy a Ā
Ā の使い方が誤っています。

D:\>copy a Ă
1 個のファイルをコピーしました。

なんだろこれ

536:デフォルトの名無しさん
12/02/15 09:54:38.86
調べてみたらこんな感じ

switch (c){
 case '&':
 case '<':
 case '>':
 case '|':
  return 0x100;
 default:
  return c;
}

537:デフォルトの名無しさん
12/02/15 11:08:50.01
Ā = Ā

538:デフォルトの名無しさん
12/02/15 11:14:57.58
Ā = &#x100;

539:デフォルトの名無しさん
12/02/15 12:17:59.80
C:\proc\data\ ディレクトリ内にある
音響.txt さくら.txt 夕暮れ.txt 冬籠もり.txt 花 暦.txtなどの複数ファイルのうち、
ひとつずつloop+moveで処理したいと思っています

find "C:\proc\data\" -maxdepth 0 -name "txt" -exec set input_file = {} \;

call "C:\proc\resize.bat" "%input_file%"
move %input_file% "C:\proc\data\move\"

txtでファイルを検索し、moveでresize.bat適用後にファイルを移動させることで
最終的にC:\proc\data\内のファイルがなくなって処理終了、と考えているのですが

最初のfindコマンドが「操作可能なプログラムまたはバッチ ファイルとして認識されていません」と表示されてしまいます

おそらく最初のコマンドがunixコマンドなのだと思うのですが
dosコマンドで同じように、特定のフォルダからファイルのパスをひとつだけ検索して変数に置き換えられるコマンドにするにはどうすればいいでしょうか
よろしくお願いします

540:デフォルトの名無しさん
12/02/15 12:36:31.32
for %f in (C:\proc\data\*.txt) do echo %f
次回は「バッチファイル」で検索してから質問する事。

> find "C:\proc\data\" -maxdepth 0 -name "txt" -exec set input_file = {} \;
> call "C:\proc\resize.bat" "%input_file%"
> move %input_file% "C:\proc\data\move\"

そもそも、findがあっても動かねーだろ。w

541:デフォルトの名無しさん
12/02/15 14:12:40.98
それ以前にfindが無いってのはどういうこと?
win98にはあったような…。win95位前は覚えてないんだけど。

542:デフォルトの名無しさん
12/02/15 14:22:32.94
winのはfindはコマンドが違うし別物
どこからか落としてきて使えないことはないけどfor /f使うのがめんどくさい

543:デフォルトの名無しさん
12/02/15 14:27:51.28
いやそれは知ってるけどさ、元からある奴は消さなきゃ無くならないだろ。

最初からないっていう環境はあんの?

544:デフォルトの名無しさん
12/02/15 15:51:48.05
>>539の事だから、どんなことやってるか凡人には想像もできない。
するだけ無駄だから「無い」はそのまま受け入れよう。

545:デフォルトの名無しさん
12/02/15 16:11:39.69
forfiles使えよ

546:デフォルトの名無しさん
12/02/15 17:14:35.31
>>540
うまくいきました!ありがとうございます!

やっぱりDOSコマンドとUNIXコマンドは別物でwindowsでのバッチコマンドは前者のみを示すんですね

547:デフォルトの名無しさん
12/02/15 17:37:03.90
>やっぱりDOSコマンドとUNIXコマンドは別物でwindowsでのバッチコマンドは前者のみを示すんですね

だって

548:デフォルトの名無しさん
12/02/15 17:45:33.75
UNIXを知ってると自慢したいだけだろw

549:デフォルトの名無しさん
12/02/15 17:54:23.44
一応forfilesがunixのfindもどきなんだけどね。
一応findstrがunixのqgrepもどきなんだけどね。


550:デフォルトの名無しさん
12/02/15 18:49:41.24
URLリンク(technet.microsoft.com)

551:デフォルトの名無しさん
12/02/15 19:02:11.46
こんなゴミのリンク貼るなよ。
>>550
サポートされているオペレーティング システムWindows 2000 Service Pack 3/Windows 2000 Service Pack 4/Windows Server 2003/Windows XP

552:デフォルトの名無しさん
12/02/15 20:19:45.98
すいません、教えてください。

バッチファイルの中の処理でファイルを作成するステートメントを書きます。

次のステートメントの処理が始まるのは、先のファイル作成の完了(ディスク上にファイルができる)の後ということでよいでしょうか。

コマンドプロンプトを考えれば、そうなると思うのですが、念のため。例えば外部ディスクへの書き込みまちなどをしている間に、次の処理が始まるということはないでしょうか。

初歩的な質問ですがお願いします。


553:デフォルトの名無しさん
12/02/15 21:16:05.18
普通に考えれば分かるだろ?

554:デフォルトの名無しさん
12/02/15 21:33:11.21
へえ?どう分かるんだ。教えろ。

555:デフォルトの名無しさん
12/02/15 21:40:23.55
基本的に逐次処理されるよ
ただしstartコマンドは/waitしない限りプロセスを起動して終了を待たずすぐ制御を返す

556:デフォルトの名無しさん
12/02/15 21:44:12.61
当たり前すぎて、つまらないレスですね

557:デフォルトの名無しさん
12/02/15 21:47:07.31
前のコマンドの終了を待たずに次のコマンドを実行するってことは
前のコマンドの実行開始とほぼ同時に次のコマンドを、更にその次を…ってことで
全てコマンドを同時実行するに等しい

558:デフォルトの名無しさん
12/02/15 21:52:43.88
書き込み量が多くてバッファに残ってるのに
次の処理が始まる可能性は?

559:デフォルトの名無しさん
12/02/15 21:56:07.57
>>558
頭悪そう

560:デフォルトの名無しさん
12/02/15 21:58:16.11
頭悪いひとが悩むようには作られてないってことだよw普通に考えれば


561:デフォルトの名無しさん
12/02/15 22:03:42.82
プロセスから見て終了していても、
実際には終了していない場合もある

562:デフォルトの名無しさん
12/02/15 22:15:24.97
下手の考え休むに似たり

563:デフォルトの名無しさん
12/02/15 22:18:41.49
具体的に反論してくれないとつまらん。
頭良いんだろ?お前ら

564:デフォルトの名無しさん
12/02/15 22:19:44.80
お前を楽しませてどうするbkk

565:デフォルトの名無しさん
12/02/15 22:23:41.72
つまんね

566:デフォルトの名無しさん
12/02/15 22:30:17.34
start hoge
nanika
matiawase hoge
ってどうやればいい?

567:デフォルトの名無しさん
12/02/15 22:34:21.30
頭悪いんで質問の意味が分からん

568:デフォルトの名無しさん
12/02/15 23:19:12.92
start hoge.bat
nanika

hoge.bat
start /w hoge.exe
matiawase hoge以下でやりたかったこと


569:デフォルトの名無しさん
12/02/15 23:20:08.67
わからんならスルーしろよw

570:デフォルトの名無しさん
12/02/15 23:29:55.10
それだと
matiawase hoge以下でやりたかったこと が nanika のあとにならんだろ

571:デフォルトの名無しさん
12/02/15 23:31:59.90
echo ^G
はどうやりぃい?

572:デフォルトの名無しさん
12/02/16 00:15:55.68
hoge|nanika
matiawasego
だな

573:デフォルトの名無しさん
12/02/16 00:20:12.51
>>569
誰に言ってるんだよ
俺は知らんぞ

574:デフォルトの名無しさん
12/02/16 07:54:23.11
552の質問をしたものです。

別プロセスを起動しない限り、先の処理の完了をもって次の処理が始まる
ということですね。何をもって完了というところが、疑問だったのですが、
基本的には、ファイル作成なら作成完了で制御情報が返ってきて、プロセス
が完了と判断すると考えることにしました。

皆様レスありがとうございました。


575:デフォルトの名無しさん
12/02/16 21:26:17.89
下手の考え休むに似たり

576:デフォルトの名無しさん
12/02/17 16:38:44.25
copy 巨大ファイル
なんてやってると、copyから復帰してもガリガリやってるな

577:デフォルトの名無しさん
12/02/19 00:40:52.49
>>576
遅延書き込みのせいかも
URLリンク(d.hatena.ne.jp)
URLリンク(d.hatena.ne.jp)

578:デフォルトの名無しさん
12/02/19 12:51:23.53
hou

>for %i in ("<html></html>") do echo %~i > index.htm
>type index.htm
<html></html>

579:デフォルトの名無しさん
12/02/20 10:43:13.48
親フォルダは削除せずに、サブフォルダだけを削除する方法ってありますか?

今は仕方がないので
rd C:\aaa /s /q
mkdir C:\aaa
という風にしています。

580:デフォルトの名無しさん
12/02/20 11:17:08.69
for /d %d in (c:\aaa\*) do rd /s /q %d

581:デフォルトの名無しさん
12/02/20 17:33:05.60
cd C:\aaa
rd . /s /q


582:デフォルトの名無しさん
12/02/20 17:55:32.97
cmdのカレントディレクトリって何故かロックされるんだよな
Explorerからの削除を妨害されて何度泣いたことか

583:デフォルトの名無しさん
12/02/20 18:20:43.56
カレントディレクトリが勝手に削除されたら困るだろが?

584:デフォルトの名無しさん
12/02/20 19:24:16.57
>>580
ありがとうございます
空フォルダが残ってしまいませんか?

>>581
ああ!たしかにこれで充分ですね!

585:デフォルトの名無しさん
12/02/20 19:30:49.87
cd, pushは必ず結果をチェックしないといつか泣きをみるぞ

cd C:\aaa || goto error
rd . /s /q
...

:error
pause
goto :eof

586:デフォルトの名無しさん
12/02/20 20:23:36.15
んじゃ

cd C:\aaa && rd . /s /q


587:デフォルトの名無しさん
12/02/22 02:42:34.41
最後に goto :eof とか書くのは意味あるのか?

588:デフォルトの名無しさん
12/02/22 02:52:17.45
cd の後に rd . /s /q とか怖いぞ
cd /d にしたほうが安全

589:デフォルトの名無しさん
12/02/22 03:40:34.17
バッチは途中でエラーがあっても突っ走るから怖いぞー

590:デフォルトの名無しさん
12/02/22 20:46:15.45
ビビッテンジャネーヨ!

591:デフォルトの名無しさん
12/02/22 21:13:52.68
>>587
その後に別のエラー処理を追加するケースとかを想定してんじゃね?

592:デフォルトの名無しさん
12/02/23 00:07:30.67
cdやpushdなんてせずにフルパス指定すればいいじゃん(いいじゃん)

593:デフォルトの名無しさん
12/02/23 00:08:54.73
どうしてもカレントディレクトリを変える必要があるのって
どんなケース?

594:デフォルトの名無しさん
12/02/23 00:48:49.77
更新日時の更新はどうやるんだっけ?

595:デフォルトの名無しさん
12/02/23 00:55:28.36
ロックしたいからカレントディレクトリを変えてるんだろ
RD フルパス指定だと、それ自体が消えちゃう
もちろん他の方法もあるだろうけど

596:デフォルトの名無しさん
12/02/23 01:16:36.08
type nul >>594

597:デフォルトの名無しさん
12/02/23 01:23:27.14
作成日時の更新はどうやるんだっけ?

598:デフォルトの名無しさん
12/02/23 01:34:16.63
WSHで

599:デフォルトの名無しさん
12/02/23 01:42:12.15
>>596
試したら更新されなかった

600:デフォルトの名無しさん
12/02/23 02:28:12.37
cd /d "%~dp1"
copy %1 +


601:デフォルトの名無しさん
12/02/23 17:08:20.85
対策法を見つけはしたが、皆さんならどうするのか聞かせて。iは、コマンドラインを想定。
set i="a" /? "b c"
if "%i%"==""a" /? "b c"" (echo YES)



602:デフォルトの名無しさん
12/02/23 18:10:01.03
待ち時間作るときって
WSHでやるかpingでやるかどっち使ってる?

603:デフォルトの名無しさん
12/02/23 18:30:05.89
sleep

604:デフォルトの名無しさん
12/02/23 18:58:53.54
timeout.exe 、2003以降なら標準で使えるし
『何かキーを推せば続行』がお手軽なので
timeout.exe が使えないか使えない可能性がある、待ちの確認やスキップが不要、なら ping

605:デフォルトの名無しさん
12/02/23 19:01:34.24
こんな便利なものがあったのかthx

606:デフォルトの名無しさん
12/02/23 22:27:48.98
>>600
cd使うなってよ

607:デフォルトの名無しさん
12/02/24 03:35:01.15
URLリンク(oshiete.goo.ne.jp)
これをフルPath指定ではなく、前方一致(もしくは部分一致)にするには、どうしたらよい?

URLリンク(www.tkssoft.com)
と組み合わせれば良いのかなー…と思ってるんだけど。
Forをネスト??

608:607
12/02/24 03:47:13.89
↓こんな感じにしてみるも、うまくいかず…

set Folder1=c:\src
set Folder2=c:\dst

for /f %%z in (c:\copy\list.txt) do call :add1 %%z

:exit
pause
exit /b

:add1
set DATA01=%1
cd /d %Folder1%
for /d /r %%a in ( * ) do copy "%%a\*%DATA01%*" "%Folder2%"

exit /b

pause


609:デフォルトの名無しさん
12/02/24 03:53:12.74
>>606
カレントディレクトリにファイルが有るんなら cd は不要だよ
copy /b %1 + nul %1
これは更新されない
copy %1 + nul %1
これは更新されるがファイルにゴミ(0x1A)が付く


610:デフォルトの名無しさん
12/02/24 10:19:43.13
>>601
@echo off
set i="a" /? "b c"
:: jは比較用
set j="b" /? "c"
:: \"a\" /\? \"b c\" を作る
set "t=%i%"
call set "t=%%t:"=\"%%"
call set "t=%%t:?=\?%%"
:: YES1だけ出たらおk
echo %i% | findstr /r /c:"%t%" >nul 2>nul && echo YES1
echo %j% | findstr /r /c:"%t%" >nul 2>nul && echo YES2
pause

611:607
12/02/24 16:13:35.83
自己解決。

:: --------------------------------- set path
set src=c:\copy\src
set dst=c:\copy\dst

:: --------------------------------- main script

echo ------ Search and Copy Start ------

for /f %%z in (list.txt) do call :copy1 %%z

:exit
pause
exit /b

:copy1
set search1=%1
echo %search1%
cd /d %src%
for /R %%i in (%search1%*) do (
copy %%i %dst%
)

exit /b

pause

:: --------------------------------- end

612:デフォルトの名無しさん
12/02/24 16:23:09.36
exit /b

pause <==== これは何のお呪いですか?

:: --------------------------------- end

613:デフォルトの名無しさん
12/02/24 17:16:06.15
お祝いです

614:デフォルトの名無しさん
12/02/24 18:18:43.22
確かにexitの直後のpauseは何の意味がって感じではあるな

615:デフォルトの名無しさん
12/02/24 19:41:10.39
cd /d "%~2"
とかで引数で受けるならサブルーチンでcdする意味あるだろうけど
cd /d %src% だとcallする度にcdするのは効率悪いから
mainのforの前でcdしてしまったほうがいいね


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