1 名前:デフォルトの名無しさん mailto:sage [2020/08/15(土) 07:00:26 ID:f3kW5kCx.net] 拡張子が .cmd または .bat のバッチファイルのスクリプティング(プログラミング)に関わる 質問,テクニック(JScript,Perl等の埋め込みなど含む),関連情報のためのスレです ※何でも無理矢理バッチでやろうとせず、WSH等の使用も検討しましょう 過去スレ %13 mevius.2ch.net/test/read.cgi/tech/1542779527/ %12 mevius.2ch.net/test/read.cgi/tech/1489207631/ %11 echo.2ch.net/test/read.cgi/tech/1424858999/ %10 peace.2ch.net/test/read.cgi/tech/1374205515/ %9 toro.2ch.net/test/read.cgi/tech/1335015478/ %8 toro.2ch.net/test/read.cgi/tech/1315844420/ %7 hibari.2ch.net/test/read.cgi/tech/1298873550/ %6 hibari.2ch.net/test/read.cgi/tech/1277465356/ %5 pc12.2ch.net/test/read.cgi/tech/1242268171/ %4 pc12.2ch.net/test/read.cgi/tech/1229955189/ %3 pc11.2ch.net/test/read.cgi/tech/1217860043/ %2 pc11.2ch.net/test/read.cgi/tech/1197881068/ 【.cmd】 バッチファイルスクリプト %1 【.bat】 pc11.2ch.net/test/read.cgi/tech/1178281991/ バッチファイルプログラミング 3.bat pc11.2ch.net/test/read.cgi/tech/1148485555/ バッチファイルプログラミング 2.bat pc8.2ch.net/test/read.cgi/tech/1104911889/ バッチファイルプログラミング質問スレ pc5.2ch.net/test/read.cgi/tech/1040614686/
2 名前:デフォルトの名無しさん mailto:sage [2020/08/15(土) 07:38:40.18 ID:sYOUYcTP.net] Swiss File Knife https://www.freewarefiles.com/Swiss-File-Knife_program_39649.html stahlworks.com/dev/swiss-file-knife.html ちょっと試したけど使い勝手が良い
3 名前:デフォルトの名無しさん mailto:sage [2020/08/15(土) 16:03:49.79 ID:YDp7CJXQ.net] startコマンドでコマンドを実行がエラーになった時にerrorlevelで戻り値確認すると9020になっている。 /wait付けても付けなくても同じ。 これが正しいのかよくわからん
4 名前:デフォルトの名無しさん mailto:sage [2020/08/15(土) 23:16:48.97 ID:vVgO0BR5.net]
5 名前:="../test/read.cgi/tech/1597442426/3" rel="noopener noreferrer" target="_blank" class="reply_link">>>3 普通の動作 実行したアプリが即時終了して9020を返しているだけ [] [ここ壊れてます]
6 名前:デフォルトの名無しさん mailto:sage [2020/08/16(日) 07:47:08.35 ID:A8ymKSpp.net] そういう結果にはならんなー (verify offはerrorlevelを0にセット、verify xxxはerrorlevelを1にセットする) C:\>verify off C:\>start xxx ファイル xxx が見つかりません。 C:\>echo %errorlevel% 9059 C:\>verify off C:\>start /wait xxx ファイル xxx が見つかりません。 C:\>echo %errorlevel% 9059 C:\>verify off C:\>start cmd /c verify xxx C:\>echo %errorlevel% 0 C:\>verify off C:\>start /wait cmd /c verify xxx C:\>echo %errorlevel% 1 startやstart /wait自体が失敗したら9059 startが成功したら0 start /waitが成功したら、実行したコマンドの戻り値を返す
7 名前:3 mailto:sage [2020/08/16(日) 09:57:56.96 ID:+xZknRBW.net] >>5 そうそうそう。 9020と9059の違いはありますが、 起動か失敗するコマンドは独自に実行するとOSから別のエラーコード(起動失敗の直接の原因となったエラー)が返ってきますが、 それがstartコマンドから実行すると(自分の場合は)9020になって本来のエラーコードがわからないって事です。
8 名前:デフォルトの名無しさん mailto:sage [2020/08/16(日) 10:40:25.72 ID:O0yhKyc9.net] start /wait cmd /k 使い方
9 名前:デフォルトの名無しさん mailto:sage [2020/08/16(日) 10:54:36.31 ID:7Iew54RL.net] コマンドは何よ?
10 名前:デフォルトの名無しさん mailto:sage [2020/08/16(日) 18:45:13 ID:5bX3HnFK.net] 話変わるけど、括弧で結果が変わるのはなんで? >color 00 & echo %errorlevel% 0 >(color 00) & echo %errorlevel% 1
11 名前:デフォルトの名無しさん [2020/08/16(日) 19:20:31.36 ID:Nztll5gc.net] ぬ? https://light.dotup.org/uploda/light.dotup.org668399.png
12 名前:デフォルトの名無しさん mailto:sage [2020/08/16(日) 19:28:17.47 ID:5bX3HnFK.net] >>10 ありがとう おれの環境だとあらかじめ set errorlevel=1 にしてるとそうなるけど
13 名前:デフォルトの名無しさん mailto:sage [2020/08/16(日) 19:29:38.18 ID:vTgpRfn/.net] 2度目のはerrorlevelを0にして試してないのでは? &でつなぐと forの中の %変数% と同じで反映されない 試してないけど遅延展開有効にして!errorlevel!とすれば多分大丈夫 ()は関係無い
14 名前:デフォルトの名無しさん mailto:sage [2020/08/16(日) 19:36:49.54 ID:5bX3HnFK.net] あらかじめ set errorlevel=0 にすると 両方とも 0 になる。
15 名前:デフォルトの名無しさん mailto:sage [2020/08/16(日) 19:42:36.63 ID:vTgpRfn/.net] set errolevel=値 したらsetした環境変数が優先されerrorlevel自動代入の機能は死ぬ set errolevel= で消せば元に戻る
16 名前:デフォルトの名無しさん mailto:sage [2020/08/16(日) 19:51:04.53 ID:5bX3HnFK.net] あらかじめ set errorlevel= にすると >>9 のようになる
17 名前:デフォルトの名無しさん mailto:sage [2020/08/16(日) 20:09:12.98 ID:vTgpRfn/.net] pushd . color 00 & echo %errorlevel% pushd . (color 00) & echo %errorlevel% てしてみ?両方0になるから 2回目の1は1回目のエラーが表示されてる %変数%の展開のタイミングは構文の評価時なのでそうなる
18 名前:デフォルトの名無しさん mailto:sage [2020/08/16(日) 20:17:16.41 ID:A8ymKSpp.net] >color 00 & echo %errorlevel% これはcolor 00 & echo %errorlevel%を実行する直前のerrorlevelが表示される。 color 00の実行結果を知りたければ&でつながずに2回に分けて実行しなければならない。 >color 00 >echo %errorlevel% あるいはcmd /v:onで遅延展開を有効にしてから >color 00 & echo !errorlevel!
19 名前:デフォルトの名無しさん mailto:sage [2020/08/16(日) 20:29:56.33 ID:5bX3HnFK.net] >>16 ありがとう。括弧は無関係ですね set errorlevel= だと初期化されないのか
20 名前:デフォルトの名無しさん mailto:sage [2020/08/16(日) 20:39:32.90 ID:vTgpRfn/.net] この「構文評価時に展開される」というロジックを使って環境変数を配列のように使えたりする for /l %%i in (1,1,5) do set A%%i=%%i for /l %%i in (1,1,5) do echo %%A%%i%% for /l %%i in (1,1,5) do call echo %%A%%i%% pause
21 名前:デフォルトの名無しさん mailto:sage [2020/08/16(日) 21:37:34.66 ID:vTgpRfn/.net] set errorlevel=値 とsetした時とそうでない時の %errorlevel% は別物 %time% %date% も同じく ビルトイン特殊環境変数 みたいな感じ 参照出来るけど環境変数としては存在しない だから set e とか set d とかしても表示されない。環境変数ではないから set t は tmp temp が表示されるはず これらは set で同名の環境変数名を設定するとそちらが優先されビルトインの方は参照出来なくなる 環境変数に設定した場合は環境変数を消去するとビルトインの方を参照する set time=0 echo %time% set time= echo %time% echo はONです。とはならない
22 名前:デフォルトの名無しさん mailto:sage [2020/08/17(月) 07:53:31.79 ID:hOPUdkb9.net] %cd% も 他に何かあったっけ?
23 名前:デフォルトの名無しさん mailto:sage [2020/08/17(月) 08:21:28 ID:hOPUdkb9.net] cd cmdcmdline cmdextversion date errorlevel highestnumanodenumber random time
24 名前:デフォルトの名無しさん [2020/08/17(月) 11:49:09.93 ID:0uhm6UU6.net] if errorlevel 0 goto err
25 名前:デフォルトの名無しさん mailto:sage [2020/08/17(月) 12:25:18 ID:Md0hBahZ.net] 後藤は極力使わない
26 名前:デフォルトの名無しさん mailto:sage [2020/08/17(月) 18:56:48.99 ID:hmt9CL+F.net] >>18 ERRORLEVEL が初期化できない場合は >cmd /c exit 7 >set ""|findstr "=E" =ExitCode=00000007
27 名前:デフォルトの名無しさん mailto:sage [2020/08/17(月) 19:02:26.61 ID:hmt9CL+F.net] echo %=ExitCode%
28 名前:デフォルトの名無しさん mailto:sage [2020/08/17(月) 19:16:51.03 ID:hmt9CL+F.net] ダメだな exit にしか使えんな
29 名前:デフォルトの名無しさん mailto:sage [2020/08/22(土) 16:25:23.98 ID:WW0Ct525.net] for %a in (a bb あ 冬 円 止 梅 十 申) do echo [%a]| findstr /r /c:"\[[^×][^×]*\]" && echo %a ok || echo %a ng 5cは大丈夫なのに7eがダメ for %a in (a bb あ 冬 円 止 梅 十 申) do echo [%a]| findstr /r /c:"\[.\]" && echo %a ok || echo %a ng findstrの正規表現の"."て1文字では無く1byteなんだな。これにも躓いた
30 名前:デフォルトの名無しさん mailto:sage [2020/08/22(土) 20:54:30 ID:ZT5qbO53.net] 以前から findstr は全角が絡むと挙動不審になる >echo A | findstr /r /c:"[ア]" A
31 名前:デフォルトの名無しさん mailto:sage [2020/08/23(日) 00:55:18 ID:W2kjoCYK.net] echo 陰|findstr /r /c:"[ア]" 陰 echo 陰|findstr /r /c:"A" 陰 "[ア]"は"0x8341" では無く、"0x83","0x41" の文字集合扱いってことみたいだね "."の扱いもそうだし1byteでしかみてないの確定か。酷い とするとほぼリテラルでしか使えないな 日本語文章のファイルからアルファベットが含まれる行を抜き出そうとして"[A-z]"とかしても関係無い行だらけになりそうだ
32 名前:デフォルトの名無しさん mailto:sage [2020/08/23(日) 05:33:34.45 ID:YFfZnyha.net] ついでに言うと正規表現ではない検索も変だろ /R 無くても同じ。何のためのオプションだよ >echo abc | FINDSTR "[b]" abc >echo abc | FINDSTR "." abc
33 名前:デフォルトの名無しさん mailto:sage [2020/08/23(日) 09:26:20.02 ID:W2kjoCYK.net] それはバグってより設計者の好みだろう デフォを自分仕様にしたかったのだろうね findstr "SPはOR検索 + 正規表現" 文字列リテラルで検索したい時は findstr /L "SPはOR検索 + 文字列リテラル" findstr /c:"SPリテラル + 文字列リテラル" SPリテラルで正規表現 findstr /r /c:"SPリテラル + 正規表現" まあ/r の有り無しで正規表現のスイッチに統一して /Lや/Cを廃止にしてspによるor検索をスイッチにした方が分かりやすかったろう というか findstr /c:"abc" /c:"xyz" と複数置けるから""だけのor検索無くても困らないんだが設計者には必要だったのだろうね "|"が正規表現のORとして無いことも関係あるのかも知れない /b "# : ; @" とか /r /c:"^#" /c:"^:" /c:"^;" /c:"^@" と書くより楽だし
34 名前:デフォルトの名無しさん mailto:sage [2020/08/23(日) 18:33:53 ID:YFfZnyha.net] >>32 勉強になりました。ありがとうございます。
35 名前:デフォルトの名無しさん mailto:sage [2020/08/23(日) 19:13:37 ID:YFfZnyha.net] FINDSTR で間違いやすい例を書いてみた。 >echo a"b"c | FINDSTR /L a"b"c || echo NG NG >echo a"b"c | FINDSTR /L a\"b\"c || echo NG a"b"c >echo "a\\b" | FINDSTR /L "a\\b" || echo NG NG >echo "a\\b" | FINDSTR /L "a\\\\b" || echo NG "a\\b"
36 名前:デフォルトの名無しさん mailto:sage [2020/08/24(月) 22:11:18 ID:lQsXqBw5.net] >>34 こりゃ、呪文だなwww
37 名前:デフォルトの名無しさん mailto:sage [2020/08/25(火) 00:00:29.45 ID:u2jzRMP8.net] 最近は ripgrep ばかりで findstr 使わなくなったなぁ
38 名前:デフォルトの名無しさん mailto:sage [2020/08/25(火) 07:21:39.36 ID:DIRbM727.net] 難問 echo a^^b | find "a^b"
39 名前:デフォルトの名無しさん mailto:sage [2020/08/25(火) 10:40:55.06 ID:QTO1Ka7Y.net] >>37 解けた echo a^^^^b | find "a^b" a^b 何故こうなるかは知らん
40 名前:デフォルトの名無しさん mailto:sage [2020/08/25(火) 11:04:16.63 ID:tde3aaGe.net] コマンドライン解析で一度、パイプで二度
41 名前:デフォルトの名無しさん mailto:sage [2020/08/25(火) 15:32:57 ID:e1SePToE.net] 難問のような書き方ができないのが初心者 難問のような書き方を回避するのが上級者、時間の無駄なので
42 名前:デフォルトの名無しさん mailto:sage [2020/08/25(火) 17:31:06.89 ID:DIRbM727.net] echo a^^b | find "ab" ab
43 名前:デフォルトの名無しさん mailto:sage [2020/08/26(水) 06:29:54.99 ID:uY0vxId0.net] https://stackoverrun.com/ja/q/1204675 昨日これにハマってた こんなエスケープの仕方、気付けるかってのw 俺はリダイレクトじゃなくてfor do の()内でfindstrの後ろに)や&&がある時にダメだった 長いと見辛くなるけど()を付けずに1行で書くとエスケープ無くとも問題ない findstrもsetと同じく基本的には改行で終わるようにするかサブルーチン呼んでネスト外にした方がいいっぽい >>40 いやほんとそれな なるべくネストさせない書き方だったりロジックが大事
44 名前:デフォルトの名無しさん mailto:sage [2020/08/26(水) 08:34:28 ID:PfiO/aOo.net] トラブルが嫌なら全部一行ずつ書けばいい あとはcallとかgotoで制御して そもそも初級者は何を回避したらいいか判別できない ハマった経験が無いからね
45 名前:デフォルトの名無しさん mailto:sage [2020/08/26(水) 08:42:47.76 ID:Aw0pMxIV.net] stackoverrunなんてパクリクソサイト使うんじゃねー stackoverflow見ろ https://stackoverflow.com/questions/4982802/escaping-a-quote-in-findstr-search-string
46 名前:デフォルトの名無しさん [2020/08/26(水) 09:18:45 ID:3xqKZ5M9.net] >>44 ここはあめぞうのパクリサイトですお
47 名前:デフォルトの名無しさん mailto:sage [2020/09/03(木) 14:07:53 ID:k8mfa657.net] 指定フォルダ配下の全フォルダに対してプログラムを実行したいんですが、 batってフォルダかどうかってどう判別すればいいんですか? Pythonのisdirみたいなことって出来ますか?
48 名前:デフォルトの名無しさん mailto:sage [2020/09/03(木) 14:42:52 ID:+v/Eop6e.net] >>46 フォルダに必ずあるファイルの存在チェック if exist "フォルダ\." echo フォルダです 又はdirコマンドの助けを借りるとか、他にもやり方はありそう >nul 2>&1 (dir /ad "フォルダ"|find "<DIR>")&&echo フォルダです
49 名前:デフォルトの名無しさん mailto:sage [2020/09/03(木) 14:52:00 ID:+v/Eop6e.net] あれ、.や..を指定するとダメみたい\のみで 間違って覚えてたのかな
50 名前:デフォルトの名無しさん mailto:sage [2020/09/03(木) 15:38:32.84 ID:14mNqQ/J.net] > 指定フォルダ配下の全フォルダに対してプログラムを実行 > isdirみたいな for /r "c:\test" %%G in (.) do ( echo "%%G" "%%~aG" call :sub "%%~fG" ) pause &exit /b :sub set "a=%~a1" if "%a:~0,1%"=="d" echo folder exit /b
51 名前:デフォルトの名無しさん mailto:sage [2020/09/03(木) 20:06:56.41 ID:cSGnh9i3.net] if exist Folder\NUL NULとかのデバイスが存在すればフォルダ
52 名前:46 mailto:sage [2020/09/03(木) 21:43:59.26 ID:s/SMQArb.net] ありがとうございます いろいろなやり方があるんですね
53 名前:デフォルトの名無しさん mailto:sage [2020/09/03(木) 23:29:38 ID:YSxN3SpI.net] 誰か挙げてくると思ってたけど嫌われてんの?w > forfiles forfiles には @isdir というまんまディレクトリ判定のがある 他にもまぁ便利っちゃ便利なんだけど、遅いのであんまり使わない forfiles
54 名前:デフォルトの名無しさん [2020/09/04(金) 00:30:01.26 ID:kQRqRY30.net] xpで使えないと駄目だろ
55 名前:デフォルトの名無しさん mailto:sage [2020/09/04(金) 23:58:55 ID:1jfeDIRi.net] XP... 今時…
56 名前:デフォルトの名無しさん mailto:sage [2020/09/05(土) 07:15:55.93 ID:6fK9k7zC.net] cd folder && program でいいやろ…
57 名前:デフォルトの名無しさん mailto:sage [2020/09/10(木) 03:56:31.22 ID:udh9kkuM.net] @echo off &setlocal enabledelayedexpansion set MD5=c472a022eb426cf1733a36e08b31c9f9 set T=0123456789ABCDEFGHIJKLMNOPQRSTUV for /L %%i in (0,1,25) do ( set /a L=5*%%i/8, L*=2, H=L+2, R=5*%%i%%8 call set /a "N=0x%%MD5:~!H!,2%%%%MD5:~!L!,2%%>>R&31 echo !N! call set HASH=!HASH!%%T:~!N!,1%% ) echo "%HASH%" if "%HASH%"=="4MS0AHCT22R2VP97M1ONOO4PP7" ( echo OK) else ( echo Fail) pause ちょっと誰か助けてくれ。気になって眠れずこんな時間になってしまった エスケープの仕方を教えて欲しい 上ので動いてるんだけどN左の引用符を外して call set /a N=0x%%MD5:~!H!,2%%%%MD5:~!L!,2%%^>^>R^&31 call set /a N=0x%%MD5:~!H!,2%%%%MD5:~!L!,2%%^^^>^^^>R^^^&31 call set /a N=0x%%MD5:~!H!,2%%%%MD5:~!L!,2%%^^^^^>^^^^^>R^^^^^&31 とか call set /a N^=0x%%MD5^:^~!H!^,2%%%%MD5^:^~!L!^,2%%^>^>R^&31 call set /a N^^^=0x%%MD5^^^:^^^~!H!^^^,2%%%%MD5^^^:^^^~!L!^^^,2%%^^^>^^^>R^^^&31 とか%重ねたりとか何時間も色々試してみたけどNが空になる 何にどれだけエスケープが必要なのかのロジックが知りたい forとcallで2段なんだと思うんだけど。。 分かる人居たらお願いします
58 名前:デフォルトの名無しさん mailto:sage [2020/09/10(木) 06:03:46.49 ID:v191ihhK.net] こういうのは嫌なのか? call set /a N=0x%%MD5:~!H!,2%%%%MD5:~!L!,2%%">>"R"&"31
59 名前:デフォルトの名無しさん mailto:sage [2020/09/10(木) 08:08:01.59 ID:udh9kkuM.net] >>57 ありがとう それでも動いたし以下でも行けた call set /a N=0x%%MD5:~!H!,2%%%%MD5:~!L!,2%%">>R&31 という事は右シフトとアンドだけが問題で他は関係無いっぽい ^だけじゃ出来ないのかな
60 名前:デフォルトの名無しさん mailto:sage [2020/09/13(日) 15:25:35.94 ID:W8TB3CjN.net] バッチファイルでメッセージボックスを表示してレジストリのバックアップをするとエラーになります なんででしょうか ご教示よろしくお願いいたします Win7 HP SP1 x64 コード @echo off set title=VBScript set text=%~nx0ファイルを実行しますか? set type=52 set tmp=%TEMP%\temp.vbs echo WScript.Quit(MsgBox("%text%",%type%,"%title%")) > %tmp% & cscript //nologo %tmp% if errorlevel 7 goto end reg export "HKCR\*" "%USERPROFILE%\Desktop\hoge.reg" /y echo. pause goto end :end del %tmp% exit エラーメッセージ エラー: ファイルに書き込めません。ディスクまたはファイル システムにエラーがある 可能性があります。
61 名前:デフォルトの名無しさん mailto:sage [2020/09/13(日) 15:53:37.94 ID:UUr/oA+t.net] たぶんディスクまたはファイルシステムにエラーがある
62 名前:デフォルトの名無しさん mailto:sage [2020/09/13(日) 16:22:35.50 ID:rbJ0gfd+.net] 実行してないけど多分&で繋いだところで、まだ%tmp%ファイルが作られてないんじゃないかな ついでに結果判定の行も実行前に通過しちゃいそう
63 名前:デフォルトの名無しさん mailto:sage [2020/09/13(日) 17:33:48.42 ID:rbJ0gfd+.net] 実行してみた 原因は%tmp%を変更したからだね(おそらくregコマンドがtmpを使ってる) %tmp%→%tmpfile%とでもしとけばいい
64 名前:デフォルトの名無しさん mailto:sage [2020/09/13(日) 17:52:08.11 ID:W8TB3CjN.net] >>62 ID:rbJ0gfd+ さんへ 長年の疑問が晴れました。ありがとうございました。m(_ _)m
65 名前:デフォルトの名無しさん mailto:sage [2020/09/14(月) 18:50:01.56 ID:QRPjjbWO.net] なんじゃそれ
66 名前:デフォルトの名無しさん mailto:sage [2020/09/15(火) 08:02:48.52 ID:zq4P2IYm.net] 昔はバカコーダーの代表格だったif else if...でひたすら羅列してるやつ、くっそ遅かったのに 今win10だとforで回すより速いんだがw 試して思わず吹いたw XP機なんてもう無いから比較出来んけど 専門用語よく分からんがプリプロセッサだかインタープリタだかがセミコンパイル?最適化?してくれるようになったん? カビ臭いセオリーに囚われてちゃイカンようだ
67 名前:デフォルトの名無しさん mailto:sage [2020/09/15(火) 10:14:02.00 ID:QjU8NMVB.net] for do 後の文中に call を入れると遅くなるのを何とかして欲しい。 処理時間が倍増する。下手すると何十倍もかかる
68 名前:デフォルトの名無しさん [2020/09/15(火) 10:25:56.06 ID:X+gTbBjK.net] フロッピーディスクでディスクキャッシュ無効にしてbat走らせると 1行ごとにbatファイルを再読み込みしているのが実感できて楽しいよ
69 名前:デフォルトの名無しさん mailto:sage [2020/09/15(火) 14:56:26.93 ID:zq4P2IYm.net] >>66 call set とかで多段展開よく使うんだけど callの代わりにfor文にしてfor変数と遅延展開にして callやめたら確かに速くなったわ 見た目上は call set の方がシンプルで速そうなんだがなー 速い書き方模索してたので助かった. ありがとう
70 名前:デフォルトの名無しさん mailto:sage [2020/09/15(火) 15:12:45.99 ID:zo2IeaGi.net] callの時点で子タスク生成して構文解釈まで行われるじゃん 速いはず無い
71 名前:デフォルトの名無しさん mailto:sage [2020/09/15(火) 15:29:08.58 ID:QjU8NMVB.net] おまけにバッチ優先だから気味が悪い @echo off echo set a=NG > set.bat call set a=OK echo %a% pause
72 名前:デフォルトの名無しさん mailto:sage [2020/09/15(火) 16:07:46.64 ID:zq4P2IYm.net] 偶にコマンド名と同じファイル名付けてトラブるバカが居るけどそれは流石にイチャモンが過ぎるだろw
73 名前:デフォルトの名無しさん mailto:sage [2020/09/15(火) 16:17:43.50 ID:QjU8NMVB.net] 普通は内部コマンド優先
74 名前:デフォルトの名無しさん [2020/09/15(火) 18:34:43.10 ID:X+gTbBjK.net] 毎回set.batがあるかpath探してるのか?
75 名前:デフォルトの名無しさん mailto:sage [2020/09/15(火) 18:52:07.91 ID:QjU8NMVB.net] そうだと思う。たぶん exe とかも捜してる。 余計な処理で時間のロス
76 名前:デフォルトの名無しさん mailto:sage [2020/09/15(火) 19:48:46.31 ID:/ea/Q9+g.net] callって元々バッチファイルを呼ぶためのコマンドだしな 環境変数を遅延展開するために使えるなんて公式ヘルプには載ってない
77 名前:デフォルトの名無しさん mailto:sage [2020/09/15(火) 23:46:39.63 ID:otyKrGil.net] >>62 これ危ないね windowsとユーザの環境変数は分けないとウィルスに悪用されそう
78 名前:デフォルトの名無しさん mailto:sage [2020/09/18(金) 22:08:23.94 ID:uEsKVG5e.net] windows板でいい答えが出なかったんでこっちに来ました。 windows10でログオンしなければ走らないプログラム(TV録画予約ソフト)があるので、Windows の自動ログオンを有効にし、 Autoexec.batに rundll32 user32.dll, LockWorkStation と記述して直ちにロックすることとしています。 しかしながら、これは不意の停電などで再起動したときの為であって、 自分自身がPCの前にいる場合は、ロック解除をしなければならないのが面倒です。 そこで、バッチファイルで 15秒待つ その間に何もキーが押されなかったら、 rundll32 user32.dll, LockWorkStation を実行 何かキーが押されたら、バッチファイルを終了 としたいのですが、どうしたらいいでしょう N88BASIC(86)だとこんなイメージ (10行の "to 1000"は適当に調節) 10 for i=1 to 1000 20 a$=inkey$ 30 if a$<>"" then goto 70 40 next i 50 rundll32 user32.dll, LockWorkStation 60 end 70 i=1000:next i 80 end ちなみに今は、autoexec.bat に TIMEOUT /T 15 /NOBREAK rundll32 user32.dll, LockWorkStation として、すぐに作業したい場合は15秒の間にcmdの右上のxをクリックしてコマンドプロンプトを閉じています
79 名前:デフォルトの名無しさん mailto:sage [2020/09/18(金) 22:14:12.38 ID:uEsKVG5e.net] こちらの質問はもしかしたらスレ違いかもしれませんが。 あるフォルダ内のファイル一覧をテキストファイルに落としたいと思っています。 一太郎Ver4.3付属のMS-DOS2.11以来、DOSに慣れ親しんでいる私は、 CMD (又は見栄を張ってpowershell)で、 D:\hoge\hoge>dir > list.txt なんてやってしまうのですが、 Windows10ネイティブのナウなヤングはWindows上で、どのようにやるのでしょうか コマンドプロンプトなんて使ったことのない、普通のWindowsユーザーさんに教える必要があります
80 名前:デフォルトの名無しさん mailto:sage [2020/09/19(土) 03:30:06.61 ID:1TUbP9BW.net] dir /b > list.txt
81 名前:デフォルトの名無しさん mailto:sage [2020/09/19(土) 05:19:51.44 ID:RfEWMQRr.net] >>77 choice /? タイムアウトも既定の状態も設定出来る
82 名前:デフォルトの名無しさん mailto:sage [2020/09/19(土) 06:32:50.16 ID:aPDv4PNE.net] キーを限定してもいいならchoice
83 名前:デフォルトの名無しさん mailto:sage [2020/09/19(土) 06:41:28.16 ID:aPDv4PNE.net] >>78 エクスプローラーで選択してホーム、パスのコピー、メモ帳にコピペ保存 Windows板でレスがあったろ
84 名前:デフォルトの名無しさん mailto:sage [2020/09/19(土) 07:30:51.34 ID:RfEWMQRr.net] choiceはotherが設定出来たら言うことなしだったのになぁ forもcontinueとbreakさえあれば。。 あと一歩をわざと使いづらくしてるのかと邪推してしまうわ
85 名前:デフォルトの名無しさん mailto:sage [2020/09/20(日) 20:29:41.51 ID:QtwFpjW/.net] 恐れ入ります。初心者です。 約400個の.m4aファイルを.mp3形式に変換しようとしています。 以下のようなバッチファイル作成において、出力ファイル名の記述が大変なのですが、 ffmpeg -i aa001.m4a -ab 48k aa001.mp3 ffmpeg -i bb004.m4a -ab 48k bb004.mp3 ffmpeg -i c030.m4a -ab 48k c030.mp3 入力ファイル名の文字列だけを変数のようにして、出力ファイル名として利用できないでしょうか? 以下のようなイメージです。 ffmpeg -i aa001.m4a -ab 48k 変数.mp3 ffmpeg -i bb004.m4a -ab 48k 変数.mp3 ffmpeg -i c030.m4a -ab 48k 変数.mp3 説明は面倒かと思いますので、参照すべきURL、 もしくは検索ワードだけでも教えて頂けると助かります。
86 名前:デフォルトの名無しさん mailto:sage [2020/09/20(日) 20:38:05.68 ID:bYdUCAyz.net] m4a ファイルが D:\M4A\ に入っているとして for %%L in (D:\M4A\*.m4a) do ffmpeg -i %%L -ab 48k %%~nL.mp3
87 名前:デフォルトの名無しさん mailto:sage [2020/09/20(日) 20:57:17.46 ID:QtwFpjW/.net] >>85 様 早速のアドバイス、ありがとうございました。 見事に変換できました。 私の発想の方向性が悪く、for文を使えば良かったのかと… ありがとうございました。
88 名前:デフォルトの名無しさん mailto:sage [2020/10/03(土) 10:47:40.18 ID:wKgZGKzj.net] 入力された文字列を使ってコマンドを走らせようとしてるんだけど変数に値は入るんだけどコマンドの方には空っぽで出力されるんだがなにか処理っているの? %で囲むだけでいいよね?
89 名前:デフォルトの名無しさん mailto:sage [2020/10/03(土) 10:53:42.03 ID:HRjNW00f.net] >>87 多分、遅延環境変数の問題 setlocal enabledelayedexpansion書かないとだめ
90 名前:デフォルトの名無しさん mailto:sage [2020/10/03(土) 10:57:51.23 ID:wKgZGKzj.net] >>88 それはなんですか?
91 名前:デフォルトの名無しさん [2020/10/04(日) 00:03:10.85 ID:1nqCsM3n.net] >>89 お前の質問が情報不足だから可能性のある回答を当てずっぽうで答えたのだろうよ なお何かというと setlocal /? を読め
92 名前:デフォルトの名無しさん mailto:sage [2020/10/04(日) 00:16:53.72 ID:VPBkvUyg.net] 上から目線怖い
93 名前:デフォルトの名無しさん mailto:sage [2020/10/07(水) 22:42:28.13 ID:8t5FIA98.net] set /p moji=入力するのじゃ echo 出力するでおじゃる %moji% うん、何の処理もいらないな
94 名前:デフォルトの名無しさん mailto:sage [2020/10/08(木) 13:42:17.79 ID:BulPjeqX.net] 遅延展開に関して setlocal /? にはロクな説明無いよ 詳しい説明が書かれているのは set /? の方 まあ87みたいなアホはスルーしとけ
95 名前:デフォルトの名無しさん mailto:sage [2020/10/09(金) 12:07:08.64 ID:xYDxCkF1.net] 入力処理を2回する時ってなにか特殊な処理とかいるの? YESNO→文字列入力で 後者の処理で変数に文字列が入らない
96 名前:デフォルトの名無しさん mailto:sage [2020/10/09(金) 12:17:29.66 ID:ZREy0Q0x.net] >>94 そんなんじゃ分からんよ 具体的に書け おそらくすぐ上のレスと同じ気はするけど
97 名前:デフォルトの名無しさん [2020/10/09(金) 12:41:22.12 ID:xYDxCkF1.net] >>95 @echo off @setlocal cd /d %~dp0 :START rem 初期化 set NUM_INPUT= set ID_INPUT= set URL_INPUT= set /P NUM_INPUT="URLはどちらですか?(1:DL/2:ok.ru/9:アップデート):" IF %NUM_INPUT% equ 1 ( set /P ID_INPUT="IDを入力してください: " youtube-dl https://lb.loadloadingfreevideo.top/hls/%ID_INPUT%/%ID_INPUT%.m3u8 --user-agent "Mozilla/5.0 (Intel Mac OS X)" ) ELSE IF %NUM_INPUT% equ 2 ( set /P URL_INPUT="URLを入力してください: " echo 入力した文字列は %URL_INPUT% です。 youtube-dl %URL_INPUT% ) ELSE IF %NUM_INPUT% equ 9 ( youtube-dl -U ) ELSE ( goto :START ) pause VisualBatで確認したところ2回目の入力値の変数には値が入ってくるんだが出力されたときには空欄で出力される…
98 名前:デフォルトの名無しさん [2020/10/09(金) 13:22:34.61 ID:MFDBon0y.net] すみません、自己解決しました
99 名前:デフォルトの名無しさん mailto:sage [2020/10/09(金) 13:34:07.34 ID:xYDxCkF1.net] してないわw
100 名前:デフォルトの名無しさん mailto:sage [2020/10/09(金) 14:11:49.12 ID:ZREy0Q0x.net] 行の解釈は、行を読み込んだ時点で解釈され、変数は置換される ()で囲まれた部分は全体で一行扱い つまり括弧内で入力したって、それは括弧を抜けないと有効でなく カッコ内は既に括弧前(if文の前)の値で置換済み やっぱり上のレスと同じじゃん