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
西日本最大の中古車オークション「ベイ・オーク」に巣食う変質者