1read 100read
2013年17プログラム13: 【.cmd】 バッチファイルスクリプト %10 【.bat】 (155) TOP カテ一覧 スレ一覧 2ch元 削除依頼
【アンチ】関数型言語は使えない【玩具】 2 (498)
【Lua】組み込み系言語総合 その6【Squirrel】 (232)
Vim vs Emacs Part2 (497)
Excel VBA 質問スレ Part31 (546)
任天堂「今後C++は捨てJavaScriptで開発していく」 (674)
【SL4】Windows Phone 7 アプリ開発スレ Part4【XNA】 (429)

【.cmd】 バッチファイルスクリプト %10 【.bat】


1 :2013/07/19 〜 最終レス :2013/09/25
拡張子が .cmd または .bat のバッチファイルのスクリプティング(プログラミング)に関わる
質問,テクニック(JScript,Perl等の埋め込みなど含む),関連情報のためのスレです。
※何でも無理矢理バッチでやろうとせず、WSH等の使用も検討しましょう。
前スレ
【.cmd】 バッチファイルスクリプト %9 【.bat】
http://toro.2ch.net/test/read.cgi/tech/1335015478/
それ以前の過去スレ
%8  http://toro.2ch.net/test/read.cgi/tech/1315844420/
%7  http://hibari.2ch.net/test/read.cgi/tech/1298873550/
%6  http://hibari.2ch.net/test/read.cgi/tech/1277465356/
%5  http://pc12.2ch.net/test/read.cgi/tech/1242268171/
%4  http://pc12.2ch.net/test/read.cgi/tech/1229955189/
%3  http://pc11.2ch.net/test/read.cgi/tech/1217860043/
%2  http://pc12.2ch.net/test/read.cgi/tech/1197881068/
%1  http://pc11.2ch.net/test/read.cgi/tech/1178281991/

2 :
うんちっち

3 :
@echo ^>^>1乙

4 :
wshもここでええのんか?

5 :
お前ら、wsh使ってますか? Part8

6 :
C:\Users\user\desktop
の時にdesktopだけを表示したいのですがよい方法はありませんか

7 :
「set /p hizuke=日付を入力して下さい:」
とやると
「日付を入力して下さい:」
と出ますが、この時に
「日付を入力して下さい:2013/07/22」
のように今日の日付をデフォルト値として表示出来ないでしょうか?
思いつきで
「set /p hizuke=日付を入力して下さい:<echo %date%」
とかやってみましたがもちろんダメでした…

8 :
set /p hizuke="日付を入力して下さい:%date%"

9 :
空入力でデフォルト値
set hizuke=%date%
set /p hizuke=日付を入力して下さい:%hizuke%

10 :
ありがとうございます。
ただ言い忘れていましたが、表示したデフォルト値をキーボードで変更できるようにしたいのです。
例えば2013/07/22と表示されたら最後の2を消して5にしたりといった具合にです。

11 :
schtasksで長いタスク名を確認する方法はありますでしょうか?
例えば
schtasks /create /tn "メモ帳を起動してやるぞ!こんちくしょう!" /tr c:\windows\system32\notepad.exe /sc daily /st 23:00:00
と入力して「メモ帳を起動してやるぞ!こんちくしょう!」というタスク名のタスクを作成します。
すると、
schtasks /query
と入力して先ほど作ったタスクを表示させるとタスク名が途切れて表示されてしまいます。
これでは途切れていない正しいタスク名がわからず、タスクを削除する時などにタスク名を指定できません。
タスクスケジューラでもPowerShellでもいいので途切れていない正しいタスク名を確認する方法を
知っている方がいましたら教えて下さい。

12 :
ありません

13 :
>>11
へー最近はそんなことになってるんだねえ
XPだとタスク名は欠けることなく全部出る
何かオプションスイッチがあるんでないのかなあ
まあ回避手段としては、タスクの実体は(XPの場合だと)tasksフォルダ内のファイル(xxx.job)なんで直接ファイル名を漁るとかかな
for /f "tokens=* delims=" %%i in ('dir /b "%systemroot%\tasks\*.job"') do echo %%~ni

14 :
ヘルプ見たら
schtasks /query /fo list
または
schtasks /query /fo csv
で表示できるんでないかな

15 :
>>13-14
/foオプションで出せるんですね。知りませんでした…
"%systemroot%\tasks"フォルダに保存されるというのも初めて知りました。
これはこれで使い道が色々ありそうなので覚えておきます。
助かりました。どうもありがとうございます。
(実は家のPCはXP-Homeでschtasks無いので試すのは明日会社でですが…(笑))

16 :
3つの.exe ファイルが有るんですが、1つを実行するBATファイルを作りたいです
どうすればいいですか?

17 :
if

18 :
今日会社のPC(Win7)で/foオプション使ってうまくいきました。
しかしWin7だとタスクのファイルは"%systemroot%\system32\tasks"フォルダに作成されるようです。
OSの種類によってパスが変わるなんてめんどうな仕様ですよね…(泣)

19 :
仕様なんだからしようがない

20 :
僕のpcにあるテキストファイルを全てusbにコピーしたいです。
すぐにコピーしてペーストすれば使えるbatのコマンドを教えてください!

21 :
@echo off
echo pcにあるテキストファイルを全てusbにコピーしました!!!
exit /b 0

22 :
ありがとう!

23 :
>>20
まず、ファイル名を列挙する
dir /s /b > deltext.bat
つぎに、ファイル名の前に、DELコマンドを付記して、バッチファイルに保存
バッチファイルを実行
バッチファイルの例
REM deltext.bat
DEL C:\work\05_06_07_08.txt
DEL C:\work\068.txt
DEL C:\work\099.txt
DEL C:\work\1.BAK
DEL C:\work\1.bat
DEL C:\work\1.ini
DEL C:\work\1.rb

24 :
>>20
テキストファイルかどうか、テキストエディタで開いてみないとわからない

25 :
>>23
DELコマンドじゃなくて、COPYコマンドだ。COPYコマンドなら、どこに送るかかかなければならない

26 :
もうねます

27 :
誤ってDELコマンドでファイルを削除した場合、
undeleteという英語版のソフトウェアで復旧できるかもしれない
どれがいいのかしらない

28 :
MOVEコマンドで、ひどいめにあったことがある。MOVEコマンドは、要注意

29 :
ワイルドカードの指定が短いファイル名の方にも効いてしまう問題って
Win7あたりで解消したんだっけ?

30 :
ではpc内のデータをすべて削除する場合はどうしたら?

31 :
iso2bin.exe isoをbin 形式に変換するファイルを見つけたんですが
使い方は、
コマンドプロンプト → cd c:\場所 → iso2bin track03.bin track01.iso
コマンドプロンプを呼び出さず簡略化したいんですけどどうすればいいですか?
D&D しても無理みたいです・・・orz

32 :
バッチファイル経由でD&D する

33 :
>>29
仕様は解消したりしないよ
自分が短いファイル名を作るからだろ。自業自得ってもんだ。
作らなきゃいいんだよ。

34 :
ちょっと記述が間違ってたので一応訂正しときます。
Win7ではSchtasksで作成したタスクはファイルとして作成されないようです。
"%systemroot%\tasks"フォルダも
"%systemroot%\system32\tasks"フォルダも見ましたが自分が作成したタスクは見当たりません。
"dir /s/b C:\*.job"ってコマンド叩いても出てきません。
コマンドで"Schtasks /query"を叩くともちろん出てきます
そういう仕様に変わったのかな?まあ"Schtasks /query"で確認できるので困りませんが。

35 :
↑は>>17ではなく>>18でした。すみません。

36 :
forコマンドで文字列置換はできないのでしょうか?
下記の<望む結果>を得たいのですが
下のコマンドでも駄目でした。
for /f %i in ('type test.txt') do echo %i:*:=%

<test.txtの内容>
ID:100
名称:あああ
価格:5000
ID:200
名称:いいい
価格:8000
<望む結果>
100
あああ
5000
200
いいい
8000

37 :
for /f "delims=: tokens=2" %i in ('type test.txt') do echo %i

38 :
>>37
でけましたーーーっ!!
おありがとうございます!
このように書くのですね。
勘違いして遅延展開とかいうのを調べてました・・・(^_^;)

39 :
すみません。教えてください。
<apply.bat>
中身↓
@echo off
dism.exe /apply-image /image file:XXX.wim /index:1 /applydir:C:\
としておきます。
しかしこれだとバッチ内で指定するwimファイル名を決めうちにしないといけません。
コマンドプロンプトから
apply.bat Image1.wim
で実行すれば、バッチ内で指定されるファイル名がImage1.wimになり、
apply.bat Win7.wim
ならWin7.wimが展開されるようにしたいのですが、何か良い方法はないでしょうか?

40 :
ファイルを指定する所にこんなの
"file:%~1"

41 :
>>40
ありがとうございました!
おかげさまでうまく行きました!

42 :
>>41
いいってことよ

43 :
バッチファイルから文字列をエコーしてファイルに流し込んで
スクリプトを作成・実行ということをしているのですが、
リダイレクト先のファイル行頭にスペースができてしまいます。
echo;>%~n0.vbs Set fso = CreateObject("Scripting.FileSystemObject")
echo;>>%~n0.vbs Set regEx = New RegExp
echo;>>%~n0.vbs Set inFile = fso.OpenTextFile("%CD%\%~n0.txt")
中略
cscript //nologo %~n0.vbs
と%~n0.vbsへ流し込むと、以下のように先頭にスペースが空きます。
□Set fso = CreateObject("Scripting.FileSystemObject")
□Set regEx = New RegExp
□Set inFile = fso.OpenTextFile("C:\home\work\20130804-145429\test.txt")
↑このスペース(□で表記)をなくしたいのです。
実用上は問題ありませんが、回避が可能であればご教示願いたいです。
お分かりの方居りましたらよろしくお願いいたします。

44 :
echo Set fso = CreateObject("Scripting.FileSystemObject")>%~n0.vbs
echo Set regEx = New RegExp>>%~n0.vbs
echo Set inFile = fso.OpenTextFile("%CD%\%~n0.txt")>>%~n0.vbs
こう?
というか、そんな書き方できたんだ……

45 :
>>44さんできました!
echo;Set regEx = New RegExp>>%~n0.vbs
として解決しました。ありがとうございます。
リダイレクト方法はいくつかあるようですね。
本来ならカッコで囲んでひとまとめにするがシンプルなのでしょう。
(
echo;ほげ
echo;ほげ
)>"%~n0.txt
この方法は今回はバッチの前後の関係から制約があるため、このような方法でやってました。
お答えいただきまして、素早い対応ありがとうございました。

46 :
>>44さんへ
質問時に書き込んだ方法ですが、まるっきりの自己流だったようです。
参考にしたサイトを見直してみたら、全然違ってました。昔の記憶をたよりに適当に書いてたようです。
混乱させてすみませんでした。
ちなみにこのサイトです。
「全般/ファイルディスクリプタとリダイレクト - CMD.EXE TIPs」
URLが長いので上のキーワードで検索してください。有名どころですが一応。では失礼します。

47 :
>>44
> というか、そんな書き方できたんだ……
俺も知らんかった…
で、試しにこうやってみると一応これでも行頭のスペースはなくなるな
echo>%~n0.vbs Set fso = CreateObject("Scripting.FileSystemObject")
echo>>%~n0.vbs Set regEx = New RegExp
echo>>%~n0.vbs Set inFile = fso.OpenTextFile("%CD%\%~n0.txt")
つまり>>44はechoの直後にセミコロンとスペースが続いてからSetがあるように
解釈されてリダイレクトされてたんだろう

48 :
> つまり>>44はechoの直後にセミコロンとスペースが続いてからSetがあるように
>>43と間違えた

49 :
echo.>hoge.txt とか echo;>hoge.txt
ってやったら空改行が出力されるのと同じ原理なのかな

50 :
>%~n0.vbs echo;Set fso = CreateObject("Scripting.FileSystemObject")
だな

51 :
いつからかコマンドプロンプトで日本語が■■■って表示されるようになっちゃったんですけど
どうやって直せばいいんですか?
ググって出てくるコードページを変えたりフォントを変えるのを試しても戻りませんでした
XPです

52 :
>>51
cmd.exeを再インストールするか諦めてCygwinとか使えばいいんじゃ?
後はWin再インスコ

53 :
>>51
レジストリ
HKEY_CURRENT_USER\Console
を削除してみろ
念のためバックアップしてからね

54 :
= を含む文字列を = を含む文字列で置換するのに良い方法無いでしょうか?
事前にIF使った総当りで入れ替えておく方法は何とかできたのですが
下記の記述方で使えそうなエスケープなどあればと思いまして。

:: A=B を B=A に置換
set test=%test:A=B=B=A%

55 :
>>53
遅くなりましたが
この方法で復活しました
ありがとうございました!

56 :
BをCに蛙
AをBに蛙
CをAに蛙

57 :
>>56
つまり、ループ内で遅延展開を用いた入れ替えをやれってことっすね!
>>54
vbsでregexpしちゃいなよ

58 :
頭が遅延してんの?

59 :
>>56-57
レスどうもです、やっぱ無理ですかぁ

60 :
power shellの話ははどこで話せばよいの?
ざっと見たけどスレがないみたいなんだけど…

61 :
Windows PowerShell Part4

62 :
Javaみたいなコンパイルに失敗したらecho %errorlevel%で1って出力されるような言語で
わざとエラーがでるコードTest.javaを用意して
batファイルに
javac Test.java
echo %errorlevel%
って書いてコマンドプロンプトから実行しても%errorlevel%が表示されません
batファイルを実行した後に、手入力でecho %errorlevel%て打つと1って表示されます
どうやってbatファイルからエラーレベルを出力できますか?

63 :
うそでしょう

64 :
echo %erorlevel%
とか

65 :
>>62
javacって使ったことないけど復帰値として値を帰さずに環境変数にセットしてるのか
まあ、そういう場合の俺の知識じゃ良い解決策はない
続きは別のbatプログラムにして、当batではタスク登録して終了し、後はタスクにその別のbatを起動してもらう方法ぐらいかな
(bat中から新たに子プロセスcmd.exeを起動しても引き継ぐ環境はそれを実行前の環境なのでダメだね)

c:\x.bat
----
javac Test.java
schtasks /create /tn test-java /sc onidle /i 1 /ru user-name /rp user-password /tr c:\y.bat
schtasks /run /tn test-java
c:\y.bat
-----
schtasks /delete /f /tn test-java
続きの処理を記述

66 :
>>65
呼び出し元プロセスの環境変数は普通変えれんぞ。
というかタスク作ってしまったら何も情報伝わらないし、その方法意味あるんか?
なんとなく、
〜(
javac Test.java
echo %errorlevel%
)
ってなってるとか、Typoがあるとか、そういうのの方が怪しい気がする。
一番確実な対処はIF ERRORLEVEL 1とかの擬似環境変数ではない組み込み機能使って判定する方法だと思う。

67 :
>>66
寝ぼけてたね
確かに意味が無いな
これはインストーラなどでPATH環境変数が変化した場合に有効な手段だった

68 :
寝ぼけてたけど、間違ったのは
動作確認のために、コントロールパネルのシステムからユーザー環境変数を追加設定してやってたため

この場合環境変数の設定値が反映されるにはcmd.exeを起動しなおさないと反映されないので

69 :
>>68
なるほど・・・現在の環境ではなくユーザの環境を読ませる一手間か
start /Iもatもユーザの環境を読み直さないし、runasはスマートカードかパスワード入力が必要になってしまうんだな
タスクはrunasと同等だし環境読み直すのも理解できるけど、エクスプローラからcmd起動したときとかはどういう挙動してんだろうコレ?

70 :
すいませんsetlocal EnableDelayedExpansionで取得できました
いまいちどうして取れたかわかりませんが

71 :
今時なぜコマンドプロンプトなんですか?
powerShellを使わない理由はなぜでしょうか?

72 :
>>71
コマンドプロンプトで足りるような用途にまで
PowerShellを使わなきゃならん理由は何だ?
まさか、自慢話を始めようとしてるのではないだろうな?

73 :
>>70
うそでしょう

74 :
>>73
66で指摘されてるようなやり方してたんじゃね。
「すいませんsetlocal EnableDelayedExpansion(して、%errorlevel%を!errorlevel!にしたら)で取得できました」
だと普通によくあるミス。

75 :
>>74
すいません書き忘れてました
そづえす%から!にも書き換えてます

76 :
findstrで実行結果にファイル名を出さない方法はありますでしょうか?
findstr "あああ" "C:\test.txt"
とファイルを完全に指定すれば実行結果は
あああいいい
いあああいい
いいあああい
のようになって、ファイル名は出ずに一致した行の内容だけが表示されます。
しかし
findstr "あああ" "C:\*.txt"
のようにワイルドカード指定にすると実行結果には
C:\test.txt: あああいいい
C:\test.txt: いあああいい
C:\test.txt: いいあああい
のように一致した行の内容だけでなく、その行が含まれているファイル名まで表示されてしまいます。
これをファイル名は出さないように出来ないでしょうか?

77 :
for %i in ("C:\*.txt") do @findstr "あああ" "%i"

78 :
>>76
forfiles /?

79 :
>>70
%〜%はその文字列を含むコマンドの実行前に展開されます。
何らかの書き方が原因で、javacの実行からエラーレベル取得までが1つ(1行)のコマンドとして解釈されてしまったのでしょう。
()で括るとかもその一つ。&で繋ぐのもそれに含まれるっけ?

80 :
type "C:\*.txt" | findstr "あああ"

81 :
call echo %%errorlevel%%

82 :
>>77>>80
ありがとうございます!
どちらでも出来そうですね。
来週会社で試してみますね。

83 :
>>78
すみません、見落としてました。
このコマンドは知りませんでした。
forfiles /m "C:\*.txt" | findstr "あああ"
とすれば処理できそうですね。
ただPCがWinXPなのでこのコマンド自体がありません…
でも勉強になりました。

84 :
findstrで一文字違いまで検索結果に含めたい時スマートな記述無いでしょうか?
「いちごぱんつ」を検索して「いちのぱんつ」とか「いちごぱんだ」とかも同時に拾いたいのです

85 :
ない
いちごぱんつ
*ちごぱんつ
い?ごぱんつ
いち?ぱんつ
いちご?んつ
いちごぱ?つ
いちごぱん*

86 :
findstrは複数文字列のOR検索するのに、
パイプを使わない表記方法(二重引用符で囲んでスペース区切り)
があるのがUNIX系のgrepコマンドより便利だよね

87 :
おお、それでOR検索してくれるのか
一行で済むならおkですありがとう

88 :
echo %test%

89 :
>>85
> *ちごぱんつ
これ正規表現として構文エラーだろw
まあこれに限らずどれも正規表現じゃなくてワイルドカードとして記述してるみたいだが
findstrじゃワイルドカードは使えないだろwww

90 :
dir /s /b "C:\windows" >> ".\a.txt"
で更新中の.\a.txtを
findstr "hoge" ".\a.txt"
で検索してもエラーが起こることは絶対にないですよね?

91 :
command.comじゃないんだからw

92 :
forコマンドの/dオプションってどういう時に使うんだ?
↓の@はAのように書けば事足りると思うが?
/rオプションもいまいち使いどころがわからない。
@for /d %i in ("c:\temp\*") do @echo %i
Afor /f %i in ('dir /s /b /ad c:\temp') do @echo %i

93 :
テキストファイルが1つあり、そのファイルの奇数行目の内容だけを表示することって可能でしょうか?

94 :
>>92
それいうとfor /Dに限らずforデフォルト動作もそうだし、
dir /Sは再帰だからfor /Dと動作違う気がするんだが、
まぁそれはそれとして置いとこう。
Aの欠点
・単純にコマンドが長い
・パイプ動作なのでcmd /U環境でないとUnicode文字が使えない
・/Sだとフルパスで冗長だし/-Sだと相対パス的に美味しくない
>>93
可能だけど、処理が複雑化する予定があるなら別の言語を併用したほうが良い
エスケープ周りで破綻してから再移植とかくっそダルいよ

95 :
>>93
とりあえずどうやるのか興味もあるだろうから例示するが、
文字列操作は、制御文字等使えない文字が多々ありいろいろトラブルのでbatでやるのは俺もお勧めしない
@echo off
setlocal ENABLEDELAYEDEXPANSION
set z=0
for /f "tokens=*" %%i in (data.txt) do (
rem set /a z=^^!z
set /a z^^=-1
if !z! neq 0 echo.%%i
)
endlocal
なお遅延環境変数を使うと、さらに文字列データ所以のトラブルが増えるので
以下のようにサブルーチンにして回避することもできる(ここでデータをパラメタ渡しにするとトラブルが増える)
@echo off
set z=0
for /f "tokens=*" %%i in (data.txt) do set data=%%i & call :output
goto :eof
:output
if %z%==0 echo.%data%
set /a z=!z
goto :eof

96 :
>>92
for /r root %i in (.)

>>94
えらく詳しいのー感心感心
隠しはどうする?

>>95
空行はどうする?
find /n /v "" data.txt
で行番号を振って、奇数行だけ

97 :
>>96
すげぇ上から目線で重箱つついてるが、そんなんで人生大丈夫か?
>隠しはどうする?
隠しを列挙したいってケースより普通にfor /Dで済むケースのほうが多いから基本問題なし
そうしなきゃ駄目な時は諦めて、欠点を潰すか無視をしてfor /Fを使えばいい
一々全部の欠点例外を潰した万能定型文で…みたいな事はアホらしいからやりたくない
妥協が許されないならハナから汎用言語でも使っとかないと只の苦行だわ
>空行はどうする?
それも使えない文字の一例にすぎないだろ
行番号を消す処理も必要になるし、その手の対策の積み重ねも複雑化を招く

98 :
>>94-95
ご回答ありがとうございます。
なるほど、Aは色々短所が目立ちますね。
実行速度も比較するのが馬鹿らしくなるほど@>>>>>>>>Aでした。
ちなみに>>93も私ですw
これも前途多難な感じなので他の方法を考えます。
なんか話が高度になってきたのでこの辺で…

99 :
set の文字列置換で文字列中に含まれる=自体を置換(削除)したいのですがどうしたらよいでしょうか?
set a=abc=def
set a=%a:==%
とやるとエラーになりますんで…

100read 1read
1read 100read
TOP カテ一覧 スレ一覧 2ch元 削除依頼
Eclipse統合M34【Java/C++/Ruby/Python/Scala】 (516)
七行プログラミング part6 (383)
MATLABプログラミング 質問箱 その4 (150)
ふらっとVisual C#,C♯,C#(初心者用) Part106 (992)
Visual Studio 2008 Part 21 (881)
Boost総合スレ part10 (141)
--log9.info------------------
【がんばれ】福島県の学習塾・予備校【受験生】 (174)
【役員降格】成基学園3【校長降格】 (393)
【代ゼミ】中久喜匠太郎【Extreme】 (107)
【2013年】第二回サクセスクリニック対策【河合塾】 (421)
【メディアセ◯クス】諸岡浩太郎13【最新の脳科学】 (553)
プロメディカス横濱について語れ!2 (768)
【プレイス】小倉弘part15【代ゼミ】 (208)
【センターから】湯木知史【医系小論文】 (512)
【めざせ】富山育英予備校金沢2【富山大学!】 (816)
京進かよってる人ちょっとこい【京進】【パート2】 (200)
代ゼミ 湘南キャンパス pt2 (404)
【ぽんっ】河合塾本郷校 Part22【ひり出る糞】 (673)
代ゼミ横浜校フレックスサテラインを語れ (106)
【悪夢の夏が】河合塾豊橋校スレ【再来だよ!9】 (721)
【べらぼうに】水戸駿優予備校Part18【単純明快】 (911)
国大セミナー4年目 (785)
--log55.com------------------
女でFUGAかメルセデスC買ってもいい?
ω俺様が気になった車を淡々と貼りつけるスレω
USS西東京ってどうよ!
86レビンの設計チームリーダーだけど質問ある?
顔面移植DQNについて語れ
セルシオ20前期
岩手の中古車販売店を語るスレ2
西日本最大の中古車オークション「ベイ・オーク」に巣食う変質者