【.cmd】 バッチファイルスクリプト %15 【.bat】 (967レス)
上下前次1-新
リロード規制です。10分ほどで解除するので、他のブラウザへ避難してください。
947: 04/06(月)17:47 ID:5bemAIxm(1) AAS
>>944
フォルダ名はバッチファイル内で指定する
robocopyはオプションに/MIRなどを指定する
948(3): [age] 04/13(月)10:04 ID:3POC0siT(1/2) AAS
以下のバッチでは全角文字を入力されてしまうと1文字で通ってしまいます。
Google検索では入力文字をバイト数で調べる例は一度ファイルに書き出す例ばかりヒットします。
余分なファイルを書き出すのは忌避されるのでそのまま全角でも入力文字のバイト数を調べる方法はありませんか?
:UsbRecovery
cls
REM 注釈
set "UsbMemory=xx"
省15
949: 04/13(月)10:33 ID:zNJlHy3K(1) AAS
ドライブ文字が正しいのか判別するためにバイト数でチェックする事に拘らなければ良いと思うよ
所詮26文字しかないのだから
950: 04/13(月)10:59 ID:0qPiOmXR(1) AAS
choice使えば
951(2): 04/13(月)15:09 ID:2xoIGF5V(1) AAS
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
省9
952(1): 948 04/13(月)21:54 ID:3POC0siT(2/2) AAS
>>951 さん ありがとう!
それでいけました。
アスキーコード数値にできないか?とか沼りかけていたので助かりました。
953: 04/15(水)19:54 ID:r6S5gYIq(1/3) AAS
入力チェックの概念がないことに驚く
954(1): 04/15(水)19:57 ID:r6S5gYIq(2/3) AAS
>>952
変数に初期値を設定するのは悪習慣
955(1): 04/15(水)19:57 ID:r6S5gYIq(3/3) AAS
>>948 はよく見るとネストしまくっているド素人だな
956(1): 04/16(木)03:45 ID:Tn//Fa1q(1) AAS
choiceの現実的な使い方
for /f "usebackq" %%i in (`choice /n /c QABC`) do set item=%%~i
957: 948 04/16(木)12:12 ID:2FlBY5v4(1) AAS
>955
ド素人です。
>>954
そうなんですか?
でも変数に初期値を設定しないと
書いた>948元のベースで複数文字の入力分岐もやっています。
入力後にメニュー戻りした次に未入力でエンターすると前回入力が残って同じ処理に入ってしまう
省3
958: 04/16(木)23:38 ID:UfvpdfWz(1) AAS
偉そうにいちゃもん付けてる奴はスルーでいいから
959(1): 04/18(土)01:51 ID:wodX6Uui(1) AAS
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
省8
960(1): 04/19(日)09:20 ID:wKsrhzcO(1) AAS
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:
省2
961(2): [age] 04/20(月)21:23 ID:UVl60nvN(1) AAS
>959
2バイト文字込み判別はぐっちゃになりそうですよねー
>>960
ありがとうございます。
そして全く理解が追い付いていないので質問ですが
C:WinOS System(SATA SSD) , D:USBメモリ , W:PCIeスロット増設 NVMe SSD というドライブ構成例で実行すると
ドライブを選択 [DW]:
省11
962: 04/20(月)22:06 ID:ghfl+cS9(1/4) AAS
環境Win11
for変数の割り当てmapがいつの間にかShift-JIS(ANSI)からUnicodeにこっそり仕様変更されてるみたいなんだけどいつからなのか分かる人居る?
Win10の途中辺り?
963: 04/20(月)22:21 ID:ghfl+cS9(2/4) AAS
>>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"
省6
964: 04/20(月)22:52 ID:ghfl+cS9(3/4) AAS
システムドライブがC:ではない環境は考慮しなくてもいいのかな?
Cドライブを必ず在るものとしてCにキャンセルを割り当てるならそのままでいいけど
ドライブにCが無い環境だとCが出ないから、その場合の処理を追加して選択にCを追加するか、キャンセル出来ない仕様になる
そう面倒でもないけれど、バッチはある程度の割り切りも必要だと思うよ
アレもコレも対策してたら数行で済む簡単なバッチが数百行に膨れ上がるからね
965: 04/20(月)23:03 ID:O2Evzmwv(1) AAS
fsutilは管理者権限がいるじゃん
そんなに厳密にしないでもいいんじゃない?
951ベースならif existで存在チェックしてるので存在しないなら問答無用で再度入力に飛ばせばいいだけのような
966: 04/20(月)23:06 ID:ghfl+cS9(4/4) AAS
>>961
知らなかったからGeminiに訊いてみたら以下でリムーバブルかどうかを判別出来るらしいからリムーバブルタイプだけを選択肢に表示させることも可能だよ
wmic logicaldisk where "DeviceID='E:'" get DriveType
fsutil fsinfo drivetype E:
967: 04/21(火)08:48 ID:t9MRVHfI(1) AAS
やってみた。netwrkドライブがあると管理者権限が必要になるかも知れない
wmicでも同様かは分からない
でもブータブルUSB作成ならどうせ権限必要だろうし
外部リンク:pastebin.com
上下前次1-新書関写板覧索設栞歴
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.030s