1 名前:デフォルトの名無しさん mailto:sage [2022/09/14(水) 20:04:01.36 ID:XL8H98jz.net] 拡張子が .cmd または .bat のバッチファイルのスクリプティング(プログラミング)に関わる 質問,テクニック(JScript,Perl等の埋め込みなど含む),関連情報のためのスレです ※何でも無理矢理バッチでやろうとせず、WSH等の使用も検討しましょう 過去スレ %14 https://mevius.5ch.net/test/read.cgi/tech/1597442426/ %13 https://mevius.2ch.net/test/read.cgi/tech/1542779527/ %12 https://mevius.2ch.net/test/read.cgi/tech/1489207631/ %11 https://echo.2ch.net/test/read.cgi/tech/1424858999/ %10 https://peace.2ch.net/test/read.cgi/tech/1374205515/ %9 https://toro.2ch.net/test/read.cgi/tech/1335015478/ %8 https://toro.2ch.net/test/read.cgi/tech/1315844420/ %7 https://hibari.2ch.net/test/read.cgi/tech/1298873550/ %6 https://hibari.2ch.net/test/read.cgi/tech/1277465356/ %5 https://pc12.2ch.net/test/read.cgi/tech/1242268171/ %4 https://pc12.2ch.net/test/read.cgi/tech/1229955189/ %3 https://pc11.2ch.net/test/read.cgi/tech/1217860043/ %2 https://pc11.2ch.net/test/read.cgi/tech/1197881068/ 【.cmd】 バッチファイルスクリプト %1 【.bat】 https://pc11.2ch.net/test/read.cgi/tech/1178281991/ バッチファイルプログラミング 3.bat https://pc11.2ch.net/test/read.cgi/tech/1148485555/ バッチファイルプログラミング 2.bat https://pc8.2ch.net/test/read.cgi/tech/1104911889/ バッチファイルプログラミング質問スレ https://pc5.2ch.net/test/read.cgi/tech/1040614686/
952 名前:デフォルトの名無しさん [2026/04/06(月) 17:47:12.77 ID:5bemAIxm.net] >>944 フォルダ名はバッチファイル内で指定する robocopyはオプションに/MIRなどを指定する
953 名前:デフォルトの名無しさん mailto:? [2026/04/13(月) 10:04:41.11 ID:3POC0siT.net] 以下のバッチでは全角文字を入力されてしまうと1文字で通ってしまいます。 Google検索では入力文字をバイト数で調べる例は一度ファイルに書き出す例ばかりヒットします。 余分なファイルを書き出すのは忌避されるのでそのまま全角でも入力文字のバイト数を調べる方法はありませんか? :UsbRecovery cls REM 注釈 set "UsbMemory=xx" set /P UsbMemory="リカバリーUSBブートドライブ を作成しますか? ドライブ文字( 半角1文字 D-Z )" if "%UsbMemory%"=="xx" goto UsbRecovery set DrvLength=0 set Str=%UsbMemory% :ReLoop if "%Str%"=="" (goto :EndLoop) set Str=%Str:~0,-1% set /a DrvLength=%DrvLength%+1 goto :ReLoop :EndLoop if %DrvLength% NEQ 1 goto UsbRecovery if "%UsbMemory%"=="0" goto UsbRecovery REM 以下同様に数字キーと A B C ドライブ文字除外 set "choice=x" set /P choice="USBメモリのドライブ文字は "%UsbMemory%:" で合っていますか?(y/n) "
954 名前:デフォルトの名無しさん mailto:? [2026/04/13(月) 10:33:11.80 ID:zNJlHy3K.net] ドライブ文字が正しいのか判別するためにバイト数でチェックする事に拘らなければ良いと思うよ 所詮26文字しかないのだから
955 名前:デフォルトの名無しさん mailto:? [2026/04/13(月) 10:59:30.02 ID:0qPiOmXR.net] choice使えば
956 名前:デフォルトの名無しさん mailto:? [2026/04/13(月) 15:09:59.92 ID:2xoIGF5V.net] set DrvList=DEFGHIJKLMNOPQRSTUVWXYZ :input choice /c DEFGHIJKLMNOPQRSTUVWXYZ /n /m "リカバリーUSBブートドライブ を作成しますか? ドライブ文字( 半角1文字 D-Z )" if ERRORLEVEL 255 goto :eof if ERRORLEVEL 1 goto :chkDrv if ERRORLEVEL 0 goto :eof :chkDrv set /a index=%ERRORLEVEL%-1 call set Drv=%%DrvList:~%index%,1%% echo %Drv% if exist "%Drv%:\." goto :start echo ご指定のドライブ(%Drv%:)は存在しません choice /n /m "もう一度選択しますか?" if ERRORLEVEL 2 goto :eof goto :input :start
957 名前:948 mailto:? [2026/04/13(月) 21:54:35.01 ID:3POC0siT.net] >>951 さん ありがとう! それでいけました。 アスキーコード数値にできないか?とか沼りかけていたので助かりました。
958 名前:デフォルトの名無しさん [2026/04/15(水) 19:54:56.95 ID:r6S5gYIq.net] 入力チェックの概念がないことに驚く
959 名前:デフォルトの名無しさん [2026/04/15(水) 19:57:02.54 ID:r6S5gYIq.net] >>952 変数に初期値を設定するのは悪習慣
960 名前:デフォルトの名無しさん [2026/04/15(水) 19:57:51.97 ID:r6S5gYIq.net] >>948 はよく見るとネストしまくっているド素人だな
961 名前:デフォルトの名無しさん mailto:? [2026/04/16(木) 03:45:00.88 ID:Tn//Fa1q.net] choiceの現実的な使い方 for /f "usebackq" %%i in (`choice /n /c QABC`) do set item=%%~i
962 名前:948 mailto:? [2026/04/16(木) 12:12:15.01 ID:2FlBY5v4.net] >955 ド素人です。 >>954 そうなんですか? でも変数に初期値を設定しないと 書いた>948元のベースで複数文字の入力分岐もやっています。 入力後にメニュー戻りした次に未入力でエンターすると前回入力が残って同じ処理に入ってしまう なので変数に初期値を設定するようにしています。 >>956 それは単1文字以外に'CLR'とか複数文字入力混在の分岐もいけますか?
963 名前:デフォルトの名無しさん mailto:? [2026/04/16(木) 23:38:20.04 ID:UfvpdfWz.net] 偉そうにいちゃもん付けてる奴はスルーでいいから
964 名前:デフォルトの名無しさん mailto:? [2026/04/18(土) 01:51:29.77 ID:wodX6Uui.net] findstrでならasciiか2バイト文字かの判別を出来るけどね findstrの正規表現の . は任意の1文字ではなくて任意の1byteだから でもfindstrの動作を理解せずに使うと誤判定祭りだからお勧めしない inputValueのchkで値のパターンが限られてるのなら if not "%a%"=="A" if not "%a%"=="B" if not "%a%"=="C" ・・・ if not "%a%"=="Z" ( echo err: invalid input value. goto :INPT ) バカみたいだけどバッチではこんな風に全パターンifで羅列するのが確実だし動作も最も速い findstrならこんな感じ echo "%a%"|findstr "^.[A-Z].$" >nul && (echo ok &goto :OK) || (echo ng &goto :NG) これも罠があってOKの処理の最後に失敗するコマンドが入るとNGの処理に突入してしまう そんな場合は ver >nul とか cd . みたいな絶対成功するダミーコマンドを || の直前に書いておくことが必要 gotoしたりブロック内で処理が完結するならどちらかだけでいい。直後は暗黙的に逆の処理だからね 自分の場合、&&はしないことが多い
965 名前:デフォルトの名無しさん mailto:? [2026/04/19(日) 09:20:07.23 ID:wKsrhzcO.net] choiceで変な文字を入力させない、が正解だとは思うけど利用可能なドライブから選択させた方がスマートじゃない? @echo off for /f "tokens=1-27 delims=:\ " %%@ in ('fsutil fsinfo drives') do set "drv=%%A%%B%%C%%D%%E%%F%%G%%H%%I%%J%%K%%L%%M%%N%%O%%P%%Q%%R%%S%%T%%U%%V%%W%%X%%Y%%Z" call set "drv=%%drv:%SystemDrive::=%=%%" if "%drv%"=="" echo ERROR: No available drives found.&echo Check the target drive connection.&pause &exit /b 1 set /p <nul=ドライブを選択 [%drv%]: for /f %%a in ('choice /c %drv% /n') do set drv=%%a: echo %drv% pause
966 名前:デフォルトの名無しさん mailto:? [2026/04/20(月) 21:23:41.47 ID:UVl60nvN.net] >959 2バイト文字込み判別はぐっちゃになりそうですよねー >>960 ありがとうございます。 そして全く理解が追い付いていないので質問ですが C:WinOS System(SATA SSD) , D:USBメモリ , W:PCIeスロット増設 NVMe SSD というドライブ構成例で実行すると ドライブを選択 [DW]: (W:はリムーバブル設定にはしていないのですが) Cを除いて表示されます。 3行目%%A%〜%%Zから%%Cを除くと[D]だけとなり ドライブを選択 [D]: 3行目%%A%〜%%Zから%%A%%B%%Cを除くと[C=]になります。 ドライブを選択 [C=]: 特定のドライブ文字'ABC'を除外して'C'を入力したら echo [ c ] キャンセル: メインメニューに戻る if "%drv%"=="C" goto MainMenu 飛ばせるようにするにはどうしたら良いのでしょうか? 専門板に思い切ってファイルを晒すにはド素人ソースで躊躇われ 今は >951 系をベースにset前 fsutil fsinfo drives 追加で有効ドライブ表示足してお茶濁し中・・・
967 名前:デフォルトの名無しさん mailto:? [2026/04/20(月) 22:06:10.26 ID:ghfl+cS9.net] 環境Win11 for変数の割り当てmapがいつの間にかShift-JIS(ANSI)からUnicodeにこっそり仕様変更されてるみたいなんだけどいつからなのか分かる人居る? Win10の途中辺り?
968 名前:デフォルトの名無しさん [2026/04/20(月) 22:21:00.83 ID:ghfl+cS9.net] >>961 > 3行目%%A%〜%%Zから%%A%%B%%Cを除くと[C=]になります。 そこ除いたせで drv が空になって、call set "drv=%%drv:%SystemDrive::=%=%%" で%SystemDrive::=% と=だけ残ってdrvに"C="がsetされた結果だね Cドライブ消さないなら call set "drv=%%drv:%SystemDrive::=%=%%" の行を削除するか 以下みたいに for /f "tokens=1*" %%a in ('fsutil fsinfo drives') do set "drv=%%b" set "drv=%drv:\=%" set "drv=%drv::=%" set "drv=%drv: =%" if "%drv%"=="" echo ERROR: 以下同じ ドライブの:も邪魔なら以下の%%aの:も消せばいいよ for /f %%a in ('choice /c %drv% /n') do set drv=%%a
969 名前:デフォルトの名無しさん mailto:? [2026/04/20(月) 22:52:47.63 ID:ghfl+cS9.net] システムドライブがC:ではない環境は考慮しなくてもいいのかな? Cドライブを必ず在るものとしてCにキャンセルを割り当てるならそのままでいいけど ドライブにCが無い環境だとCが出ないから、その場合の処理を追加して選択にCを追加するか、キャンセル出来ない仕様になる そう面倒でもないけれど、バッチはある程度の割り切りも必要だと思うよ アレもコレも対策してたら数行で済む簡単なバッチが数百行に膨れ上がるからね
970 名前:デフォルトの名無しさん mailto:? [2026/04/20(月) 23:03:50.43 ID:O2Evzmwv.net] fsutilは管理者権限がいるじゃん そんなに厳密にしないでもいいんじゃない? 951ベースならif existで存在チェックしてるので存在しないなら問答無用で再度入力に飛ばせばいいだけのような
971 名前:デフォルトの名無しさん mailto:? [2026/04/20(月) 23:06:17.23 ID:ghfl+cS9.net] >>961 知らなかったからGeminiに訊いてみたら以下でリムーバブルかどうかを判別出来るらしいからリムーバブルタイプだけを選択肢に表示させることも可能だよ wmic logicaldisk where "DeviceID='E:'" get DriveType fsutil fsinfo drivetype E:
972 名前:デフォルトの名無しさん mailto:? [2026/04/21(火) 08:48:36.18 ID:t9MRVHfI.net] やってみた。netwrkドライブがあると管理者権限が必要になるかも知れない wmicでも同様かは分からない でもブータブルUSB作成ならどうせ権限必要だろうし ttps://pastebin.com/rSyB3uDK
973 名前:デフォルトの名無しさん [2026/04/21(火) 19:32:20.53 ID:fTCusT8W.net] ドライブ名を入力させるものなんて誰が使う想定なんだろうか?
974 名前:948 961 mailto:? [2026/04/21(火) 22:20:34.21 ID:nFogp4jA.net] 現状は >951 をベースにしています。 もう晒してしま・・・ https://www.%41xfc.%4Eet/u/4123910?key=ENQ (そのままだとNGワードの為コード置き換え) 更新すると旧版は削除していっています。 BatPsSecureBootCheck.bat を右クリックメニューから管理者として実行 :UsbRecovery 部分です
975 名前:デフォルトの名無しさん mailto:? [2026/04/22(水) 04:04:27.84 ID:XdxgzwWb.net] for %%a in (ProductName DisplayVersion CurrentBuild EditionID UBR) do for /f "tokens=2*" %%b in (' reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v %%a 2^>nul ^| find "%%a" ') do set "%%a=%%c" :: 確認用echo for %%a in (ProductName DisplayVersion CurrentBuild EditionID UBR) do call echo %%%%a%% if not defined UBR goto :WINVERR if not defined DisplayVersion goto :WINVERR pause &exit /b :WINVERR echo 対象は以下のバージョン以上です。 echo Win10 21H2 19044.6575 echo Win10 22H2 19045.6575 echo Win11 24H2 26100.7171 echo Win11 25H2 26200.7171 echo. pause &exit /b 1 凄い頑張ってるとは思うけど、似たようなコマンドが並ぶ時は for で繰り返し処理させてやれば少しはスッキリするしエラーも個別に出す必要が無いならなるべく纏めた方がいいと思うよ
976 名前:デフォルトの名無しさん mailto:? [2026/04/22(水) 23:33:26.02 ID:XdxgzwWb.net] if [19045] GEQ [%WinBuild%] みたいに [] で括ると文字列比較になっちゃって数値比較にならないから意図しない動作になるよ ProductName, DisplayVersion, EditionID は必要ないんじゃない?後ろの方で使ってるのかな? 全部つぶさに見たわけじゃないけど、バージョンchkだけ、ちょっとあんまりだったから我慢出来ずに書き直してみた https://pastebin.com/nP97mVZx
977 名前:デフォルトの名無しさん [2026/04/23(木) 12:59:38.99 ID:d8NkBaMm.net] 大雨来る前に帰るか
978 名前:948 961 969 mailto:? [2026/04/23(木) 21:44:34.18 ID:zd0nDStg.net] >>971 >後ろの方で使ってるのかな? このスプリクトもバージョンチェックと注意警告だけで他の条件処理には使っていないはずです。 スマートな処理を書けないレベルでなさけないですが 冒頭部分でやりたいのは排他処理ではなく ProductName, DisplayVersion, EditionID をぐちゃぐちゃ取得しているのは Windows11 でそれぞれを取得すると以下の例とかになるからで ProductName 「Windows 10 Pro」← これがねー DisplayVersion 「25H2」 EditionID 「Professional」 ちゃんと Windows 11 〜 と 起動OS環境 %CheckUEFI% と適用外警告も表示させたい為にです。 [AU]項目のセキュアブートアップグレードキー AvailableUpdates 0x5944 対象がバージョン制約ありでも表示だけです。 後、今年の1月大型アップデートからセキュアブートキー自動更新でハングアップするPC環境がそれなりに出ているようです。 ネットから遮断し一時対処に AvailableUpdates 0x0 するか セキュアブートDisabled後に回避処置してからセキュアブートEnabled戻しをしないと セキュアブート起動に失敗する(繰り返す)という事態も。 (たぶんUEFI-BIOS項目のセキュアブート:「メーカーデフォルトキー」「カスタマイズキーの破棄」設定が原因の可能性もあり) その指標に現状のリビジョン、セキュアブートの有効/無効 等を表示したい訳です。 自分でレジストリエディターを起動して変更するのは怖くても 半自動バッチファイルで示すとやるというイミフな人たちもいたりします。 []の比較が文字列対象だったのは単におバカなだけですね......指摘助かります
979 名前:948 961 969 mailto:? [2026/04/23(木) 21:51:21.33 ID:zd0nDStg.net] バージョンchk部分は [] で括るの修正しただけです ver.2026-04-23 約14.8 MB https://www.%41xfc.%4Eet/u/4124095?key=ENQ 修正: PowerShell 専用 Psフォルダを構築 追加: ver.2026-04-23 : Ps\BatPsSecureBootloaderPreserve.ps1 追加: ver.2026-04-23 : Ps\BatPsSecureBootloaderRecovery.ps1 (危険)
980 名前:デフォルトの名無しさん [2026/04/28(火) 14:17:02.88 ID:W6oqDl7R.net] 梅
981 名前:デフォルトの名無しさん [2026/04/28(火) 14:19:07.18 ID:W6oqDl7R.net] うめ
982 名前:デフォルトの名無しさん [2026/04/28(火) 14:19:44.45 ID:W6oqDl7R.net] 楳
983 名前:デフォルトの名無しさん [2026/04/28(火) 14:20:03.97 ID:W6oqDl7R.net] 埋
984 名前:デフォルトの名無しさん [2026/04/29(水) 10:04:58.16 ID:1CmJ+fMR.net] u
985 名前:デフォルトの名無しさん [2026/04/29(水) 10:06:01.33 ID:1CmJ+fMR.net] m
986 名前:デフォルトの名無しさん [2026/04/29(水) 10:06:41.24 ID:1CmJ+fMR.net] e
987 名前:デフォルトの名無しさん [2026/04/29(水) 14:23:13.80 ID:1CmJ+fMR.net] う
988 名前:デフォルトの名無しさん [2026/04/29(水) 14:23:29.24 ID:1CmJ+fMR.net] め
989 名前:デフォルトの名無しさん [2026/04/29(水) 14:23:43.84 ID:1CmJ+fMR.net] u
990 名前:デフォルトの名無しさん [2026/04/29(水) 14:23:57.41 ID:1CmJ+fMR.net] m
991 名前:デフォルトの名無しさん [2026/04/29(水) 14:24:28.61 ID:1CmJ+fMR.net] e
992 名前:デフォルトの名無しさん [2026/04/29(水) 19:39:27.33 ID:yRjpybQD.net] メカニカルキーボードのFILCOで知られる「ダイヤテック」が事業終了
993 名前:デフォルトの名無しさん [2026/04/30(木) 10:03:30.42 ID:WoeOHcw8.net] う
994 名前:デフォルトの名無しさん [2026/04/30(木) 10:03:57.19 ID:WoeOHcw8.net] め
995 名前:デフォルトの名無しさん [2026/04/30(木) 10:04:15.61 ID:WoeOHcw8.net] よ
996 名前:デフォルトの名無しさん [2026/04/30(木) 10:04:38.90 ID:WoeOHcw8.net] 殖
997 名前:デフォルトの名無しさん [2026/04/30(木) 10:04:55.86 ID:WoeOHcw8.net] や
998 名前:デフォルトの名無しさん [2026/04/30(木) 10:05:25.65 ID:WoeOHcw8.net] せ
999 名前:デフォルトの名無しさん [2026/04/30(木) 10:05:45.16 ID:WoeOHcw8.net] よ
1000 名前:デフォルトの名無しさん mailto:? [2026/04/30(木) 10:20:36.62 ID:NmSnIhH1.net] 援護
1001 名前:デフォルトの名無しさん [2026/04/30(木) 10:20:51.93 ID:NmSnIhH1.net] んご
1002 名前:デフォルトの名無しさん [2026/04/30(木) 10:21:06.01 ID:NmSnIhH1.net] ンゴ
1003 名前:デフォルトの名無しさん [2026/04/30(木) 10:21:19.35 ID:NmSnIhH1.net] e
1004 名前:デフォルトの名無しさん [2026/04/30(木) 10:21:31.89 ID:NmSnIhH1.net] n
1005 名前:デフォルトの名無しさん [2026/04/30(木) 10:21:44.05 ID:NmSnIhH1.net] d
1006 名前:1001 [Over 1000 Thread.net] このスレッドは1000を超えました。 新しいスレッドを立ててください。 life time: 1323日 14時間 17分 43秒
1007 名前:1002 [Over 1000 Thread.net] 5ちゃんねるの運営はUPLIFT会員の皆さまに支えられています。 運営にご協力お願いいたします。 ─────────────────── 《UPLIFT会員の主な特典》 ★ 5ちゃんねる専用ブラウザからの広告除去 ★ 5ちゃんねるの過去ログを取得 ★ 書き込み規制の緩和 ─────────────────── 会員登録には個人情報は一切必要ありません。 4 USD/mon. から匿名でご購入いただけます。 ▼ UPLIFT会員登録はこちら ▼ https://uplift.5ch.io/ ▼ UPLIFTログインはこちら ▼ https://uplift.5ch.io/login
1008 名前:過去ログ ★ [[過去ログ]] ■ このスレッドは過去ログ倉庫に格納されています