- 1 名前:デフォルトの名無しさん [2010/06/25(金) 20:29:16 ]
- 拡張子が .cmd または .bat のバッチファイルのスクリプティング(プログラミング)に関わる
質問,テクニック(JScript,Perl等の埋め込みなど含む),関連情報のためのスレです。 ※何でも無理矢理バッチでやろうとせず、WSH等の使用も検討しましょう。 前スレ 【.cmd】 バッチファイルスクリプト %5 【.bat】 pc12.2ch.net/test/read.cgi/tech/1242268171/ 【.cmd】 バッチファイルスクリプト %4 【.bat】 pc12.2ch.net/test/read.cgi/tech/1229955189/ 【.cmd】 バッチファイルスクリプト %3 【.bat】 pc11.2ch.net/test/read.cgi/tech/1217860043/ 【.cmd】 バッチファイルスクリプト %2 【.bat】 pc12.2ch.net/test/read.cgi/tech/1197881068/ 【.cmd】 バッチファイルスクリプト %1 【.bat】 pc11.2ch.net/test/read.cgi/tech/1178281991/
- 2 名前:デフォルトの名無しさん mailto:sage [2010/06/26(土) 01:47:00 ]
- >>1
スレ立て乙
- 3 名前:デフォルトの名無しさん mailto:sage [2010/06/28(月) 07:01:18 ]
- お願いします。
for /f "usebackq tokens=*" %i in (`echo c:\`) do @set RESULT=%i echo %RESULT% c:\ とうまくいくのですがこれにパイプを入れて for /f "usebackq tokens=*" %i in (`echo c:\ | dir`) do @set RESULT=%i とすると、| の使い方が誤っています。とエラーになります。 echo c:\ | dirだけ打ち込むと、 dir c:\と同じ結果が得られます。 パイプ処理を用いたコマンド結果を変数に格納したいのですが、うまくいきません。 どのようにすればうまくいくか教えて下さい。 主として使うOSはvistaですが、xpでも動くようにしたいです。
- 4 名前:デフォルトの名無しさん mailto:sage [2010/06/28(月) 07:07:00 ]
- >xpでも動くようにしたいです。
xpだとecho c:\ | dir自体うまくいかないぞ カレントディレクトリのリストが表示されるだけ 普通にdir c:\形式に書き換えればいいんじゃねーの
- 5 名前:3 mailto:sage [2010/06/28(月) 07:40:33 ]
- >>4
レス恐縮です。 コマンドは、dirを説明上用いていますが、 for /f でパイプが動作しないのです。 コマンドの組み合わせが悪いのかと思い いろいろコマンドを変えてはみたのですが。 そこをなんとかお教えいただければ。 ちなみに当方の環境では、echo c:\ | dirはうまく動きました。 xp proとメディアセンターエディションで確かめました。
- 6 名前:デフォルトの名無しさん mailto:sage [2010/06/28(月) 09:50:46 ]
- | を ^ でエスケープして ^|
他の例は「バッチファイル エスケープ」あたりでググれば良いかと。 本筋じゃないけど、>>4 の言うように「echo c:\ | dir」はうまくいかないと思うんだが。 「dir /b < echo c:\」?
- 7 名前:デフォルトの名無しさん mailto:sage [2010/06/28(月) 12:01:55 ]
- 単に説明に使ってるだけだからdirでもdriでもなんでもいいんじゃね
- 8 名前:デフォルトの名無しさん mailto:sage [2010/06/28(月) 14:39:04 ]
- for /f "usebackq tokens=*" %i in (`"echo c:\ | dir"`) do @set RESULT=%i
"〜"で逃げろ
- 9 名前:デフォルトの名無しさん [2010/06/29(火) 07:20:47 ]
- >>1
乙
- 10 名前:デフォルトの名無しさん mailto:sage [2010/06/29(火) 21:32:22 ]
- 。・ 。・゚。・゚。・゚。゚・.・。゚゜。゚・。.゚・。
。・゚ 。・゚ 。・゚。・ ・゚. 。・゚ 。・゚ 。・゚ 。・。 。・゚ 。・゚ 。・゚ 。・。・ 。・゚ 。・゚ 。・゚ 。・。・゚ 。・゚ 。・゚ 。・゚ 。・。・゚・ 。・゚ 。・゚ 。・゚ 。・゚・゚・ 。・゚ 。・゚ 。・゚ 。・゚・。・゚ 。・゚ 。・゚ 。・゚ 。・゚・。・ ゚・ ∧_,,∧ 。・゚ 。・゚ 。・゚ ・。・゚・ 。 ・゚。 ( ;`・ω・ ) 。・゚ 。・゚ 。・゚。・゚・。 ・゚・。 ・゚・。・゚ ・。・゚・。・゚・ 。・゚ ・。・。・ / o━ヽニニニニニニニニニニニニニニニニニニフ しー-J ID:にカーソルを合わせると不思議と>>1乙になる馬鹿にはできない魔法のコピペ
- 11 名前:デフォルトの名無しさん mailto:sage [2010/06/30(水) 00:07:48 ]
- >>10
- 12 名前:デフォルトの名無しさん mailto:sage [2010/07/09(金) 19:12:34 ]
- ファイルをD&Dすると拡張子を除去するバッチを作ったんですが、
全角スペースが含まれている場合にファイル名が分割されてしまって動きません。 半角スペースが含まれる場合はダブルクォーテーションが付加されるので問題なく処理できるのですが・・・ やはり対処法はファイル名を変更するかD&Dをしないことしかないでしょうか。 echo %1 >> log.txt を追加してやると、ファイル名が分割されてるのが確認できます。 cd /d "%~dp1" :loop if %1=="" goto end rename %1 "%~n1" shift goto loop :end とりあえず > rename "たいとる *.*" "たいとる *.*" でまとめて半角スペースにできたのでこれでいきます。
- 13 名前:デフォルトの名無しさん mailto:sage [2010/07/09(金) 23:41:10 ]
- %*を自分でパーズすればできるよ
- 14 名前:デフォルトの名無しさん mailto:sage [2010/07/09(金) 23:47:10 ]
- パーズ
- 15 名前:デフォルトの名無しさん mailto:sage [2010/07/10(土) 00:17:16 ]
- 普通のプログラミング言語ならやりやすいだろうけど
%~dp1を記憶しといて一致するまでのやつを連結? ちょっと大変だなあ。
- 16 名前:名無しさん@そうだ選挙に行こう mailto:sage [2010/07/10(土) 17:09:02 ]
- ぐぐればサンプルあるよ
- 17 名前:デフォルトの名無しさん mailto:sage [2010/07/12(月) 21:13:48 ]
- set x=%*
for %%i in (%x: =?%) do echo "%%~i"
- 18 名前:デフォルトの名無しさん [2010/07/14(水) 11:13:01 ]
- &を含む引数を受け取る方法は無いでしょうか?
拡張子関連付けして、他のプログラムから受け取ってます
- 19 名前:デフォルトの名無しさん mailto:sage [2010/07/14(水) 14:11:35 ]
- ""で囲ってやると受け取れるみたいだ
- 20 名前:デフォルトの名無しさん [2010/07/14(水) 14:50:18 ]
- >>19
ありがとうございます。 いろいろ試行錯誤してたのが馬鹿みたいに、スマートに解決しました。
- 21 名前:デフォルトの名無しさん mailto:sage [2010/07/15(木) 22:04:37 ]
- exeファイルがコンソールアプリか否かバッチでどうやっったら判定できますか?
- 22 名前:デフォルトの名無しさん mailto:sage [2010/07/16(金) 15:27:37 ]
- ttp://chrono.cocolog-nifty.com/programming/2005/07/windows_0e6f.html
こんなのが。バッチは向かない気がバリバリする。
- 23 名前:デフォルトの名無しさん mailto:sage [2010/07/16(金) 15:34:22 ]
- 後は任せた
set command=%1 goto %command% :explorer :notepad echo not CUI exit /b :cmd :sort echo CUI exit /b
- 24 名前:デフォルトの名無しさん mailto:sage [2010/07/18(日) 02:41:59 ]
- バリバリ やめて!(ry
@if(0)==(0) echo off cscript.exe //NoLogo //E:JScript "%~f0" %1 echo %errorlevel% goto :EOF @end var sc=new ActiveXObject("ScriptControl"); sc.Language="VBScript"; sc.AddCode("Function bin(t):bin=AscB(t)+AscB(MidB(t,2,1))*256:End Function"); function B(data){return sc.Run("bin", data);} var ado=new ActiveXObject("ADODB.Stream"); ado.Type=1; ado.Open(); ado.LoadFromFile(WScript.Arguments(0)); if(23117!=B(ado.Read(2))){ado.Close();WScript.Quit(-1);}//not MZ ado.Position=ado.Size>60?60:0; sigp=B(ado.Read(2)); ado.Position=ado.Size>sigp?sigp:0; sig=B(ado.Read(2)); if(17744==sig){//PE ado.Position=sigp+92; sys=B(ado.Read(2)); ado.Close(); WScript.Quit(sys); }else if(17742==sig){ado.Close();WScript.Quit(-2);//NE }else ado.Close();WScript.Quit(-3);//MZ
- 25 名前:デフォルトの名無しさん mailto:sage [2010/07/18(日) 16:29:01 ]
- exehder.exe
dumpbin.exe
- 26 名前:デフォルトの名無しさん mailto:sage [2010/07/19(月) 03:05:32 ]
- SHGFI_EXETYPE
- 27 名前:デフォルトの名無しさん [2010/07/21(水) 23:57:28 ]
- バッチを実行したタイミングで指定したテキストファイルに
現在の日時を追記し保存する処理を考えています できるだけ簡単にやりたいのですがcmd(コマンド)だけでできますでしょうか? cmdのショートカットだけでできれば1番いいのですが スレ違いでしたら、すいません。
- 28 名前:デフォルトの名無しさん mailto:sage [2010/07/22(木) 01:04:13 ]
- echo %date% %time% >> "%~0.log"
start "" yourcommand
- 29 名前:デフォルトの名無しさん mailto:sage [2010/07/22(木) 03:00:58 ]
- cmd /c echo %date% %time% >> "%~0.log" & start "" yourcommand
- 30 名前:27 [2010/07/22(木) 09:57:25 ]
- >>28-29
ありがたき幸せ あとは余計な秒を削るのを調べてみます yyyy/mm/dd hh:mm:ssにしたいので
- 31 名前:27 [2010/07/22(木) 18:51:07 ]
- >>30の目的が達成できました
バッチスクリプトは奥が深いですね 少し勉強してみます
- 32 名前:27 mailto:sage [2010/07/22(木) 23:29:23 ]
- 連投ですいません
cmd /c echo %date% %time% >> "ログ.txt" これを実行して生成されたファイルを見ると yyyy/mm/dd hh:mm:ss△ と表記されます(△は半角ブランク) この半角ブランクをバッチスクリプト内で外す事が出来ずに悩んでます 何か良い方法がありますでしょうか? また、何故半角ブランクが付加されるのでしょうか?
- 33 名前:デフォルトの名無しさん mailto:sage [2010/07/23(金) 00:25:33 ]
- >>32
cmd /c echo %date% %time%>> "ログ.txt" リダイレクトの直前のスペースを書かない
- 34 名前:デフォルトの名無しさん mailto:sage [2010/07/23(金) 02:44:59 ]
- すいません。誰か教えてください
ドラッグ&ドロップするとファイル名の先頭に「決」をつけるように ren %~f1 決%~n1%~x1 としたんですが、ファイル名に空白があると「コマンドの構文が誤っています」と出ます。 対処法を教えてください。 また複数ファイルドロップに対応する方法はありますでしょうか? よろしくお願いします
- 35 名前:デフォルトの名無しさん mailto:sage [2010/07/23(金) 04:08:22 ]
- for %%a in (%*) do ren "%%a" "決%~n1%~x1"
確認してない
- 36 名前:デフォルトの名無しさん mailto:sage [2010/07/23(金) 06:26:32 ]
- >>35
ありがとうございます。 確認したら出来ませんwwwでしたが、元にして完成しました。 空白もなんとか解決できそうです。
- 37 名前:32 mailto:sage [2010/07/23(金) 07:49:36 ]
- >>33
そんなオチだったとは… ○| ̄|_ ありがとうございました
- 38 名前:デフォルトの名無しさん mailto:sage [2010/07/23(金) 16:38:08 ]
- >>34をcmdのショートカットだけでできますか?
- 39 名前:デフォルトの名無しさん mailto:sage [2010/08/08(日) 04:02:40 ]
- 有効なIPが割り当てられているか否かで処理を分岐したいんですが
ネットワークに接続できている場合変数に0、接続できていない場合変数に1を入れたい場合どうすればよいでしょうか?
- 40 名前:デフォルトの名無しさん mailto:sage [2010/08/08(日) 10:09:32 ]
- >>39
自分自身が持つIPが有効で接続されているかどうかということ? ipconfigでデフォルトゲートウェイのIPアドレスを取得して そこにpingして帰ってきた文字列をfindして分岐かな?
- 41 名前:デフォルトの名無しさん mailto:sage [2010/08/08(日) 10:40:33 ]
- ping後のerrorlevelでええがな
- 42 名前:デフォルトの名無しさん mailto:sage [2010/08/08(日) 11:49:24 ]
- netsh interface <ipv4 or ipv6> show interfaces
netsh interface <ipv4 or ipv6> show ipaddress name=<インデックス or 名前>
- 43 名前:デフォルトの名無しさん mailto:sage [2010/08/09(月) 05:05:09 ]
- >>40
ありがとうございます。 できました この方法で分岐しようと思います。 >>41 ありがとうございます。 その方法だと場合によって無効でもerrorlevelに0が入ってしまうんです・・・。 オプションでできるかもしれませんがわかりませんでした。 >>42 ありがとうございます。 一番スマートそうですが 僕のレベルだと理解できませんでした・・・。
- 44 名前:デフォルトの名無しさん mailto:sage [2010/08/09(月) 16:32:19 ]
- fpcu.on.coocan.jp/dosvcmd/bbs/log/dir/4-0740.html
のようにTESTフォルダ下のフォルダ数を変数に格納したいのですがわかりません お願いします。 for /D %%f in (*) do set /a i=i+1
- 45 名前:デフォルトの名無しさん mailto:sage [2010/08/09(月) 18:29:50 ]
- すまんこ
forのヘルプに書いてあったwww
- 46 名前:デフォルトの名無しさん mailto:sage [2010/08/09(月) 23:03:45 ]
- >>44
解決しました。 CD TEST FOR /F "DELIMS=" %%A IN ('DIR /B ^| FIND /C /V ""') DO SET COUNT=%%A
|

|