【.cmd】 バッチファイルスクリプト %15 【.bat】at TECH
【.cmd】 バッチファイルスクリプト %15 【.bat】 - 暇つぶし2ch964:デフォルトの名無しさん
26/04/18 01:51:29.77 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:デフォルトの名無しさん
26/04/19 09:20:07.23 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:デフォルトの名無しさん
26/04/20 21:23:41.47 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:デフォルトの名無しさん
26/04/20 22:06:10.26 ghfl+cS9.net
環境Win11
for変数の割り当てmapがいつの間にかShift-JIS(ANSI)からUnicodeにこっそり仕様変更されてるみたいなんだけどいつからなのか分かる人居る?
Win10の途中辺り?

968:デフォルトの名無しさん
26/04/20 22:21:00.83 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:デフォルトの名無しさん
26/04/20 22:52:47.63 ghfl+cS9.net
システムドライブがC:ではない環境は考慮しなくてもいいのかな?
Cドライブを必ず在るものとしてCにキャンセルを割り当てるならそのままでいいけど
ドライブにCが無い環境だとCが出ないから、その場合の処理を追加して選択にCを追加するか、キャンセル出来ない仕様になる
そう面倒でもないけれど、バッチはある程度の割り切りも必要だと思うよ
アレもコレも対策してたら数行で済む簡単なバッチが数百行に膨れ上がるからね

970:デフォルトの名無しさん
26/04/20 23:03:50.43 O2Evzmwv.net
fsutilは管理者権限がいるじゃん
そんなに厳密にしないでもいいんじゃない?
951ベースならif existで存在チェックしてるので存在しないなら問答無用で再度入力に飛ばせばいいだけのような

971:デフォルトの名無しさん
26/04/20 23:06:17.23 ghfl+cS9.net
>>961
知らなかったからGeminiに訊いてみたら以下でリムーバブルかどうかを判別出来るらしいからリムーバブルタイプだけを選択肢に表示させることも可能だよ
wmic logicaldisk where "DeviceID='E:'" get DriveType
fsutil fsinfo drivetype E:

972:デフォルトの名無しさん
26/04/21 08:48:36.18 t9MRVHfI.net
やってみた。netwrkドライブがあると管理者権限が必要になるかも知れない
wmicでも同様かは分からない
でもブータブルUSB作成ならどうせ権限必要だろうし
URLリンク(pastebin.com)

973:デフォルトの名無しさん
26/04/21 19:32:20.53 fTCusT8W.net
ドライブ名を入力させるものなんて誰が使う想定なんだろうか?

974:948 961
26/04/21 22:20:34.21 nFogp4jA.net
現状は >951 をベースにしています。
もう晒してしま・・・
URLリンク(www.%41xfc.%4Eet)
(そのままだとNGワードの為コード置き換え)
更新すると旧版は削除していっています。
BatPsSecureBootCheck.bat を右クリックメニューから管理者として実行

:UsbRecovery 部分です

975:デフォルトの名無しさん
26/04/22 04:04:27.84 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:デフォルトの名無しさん
26/04/22 23:33:26.02 XdxgzwWb.net
if [19045] GEQ [%WinBuild%] みたいに [] で括ると文字列比較になっちゃって数値比較にならないから意図しない動作になるよ
ProductName, DisplayVersion, EditionID は必要ないんじゃない?後ろの方で使ってるのかな?
全部つぶさに見たわけじゃないけど、バージョンchkだけ、ちょっとあんまりだったから我慢出来ずに書き直してみた
URLリンク(pastebin.com)

977:デフォルトの名無しさん
26/04/23 12:59:38.99 d8NkBaMm.net
大雨来る前に帰るか

978:948 961 969
26/04/23 21:44:34.18 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
26/04/23 21:51:21.33 zd0nDStg.net
バージョンchk部分は [] で括るの修正しただけです
ver.2026-04-23 約14.8 MB
URLリンク(www.%41xfc.%4Eet)
修正: PowerShell 専用 Psフォルダを構築
追加: ver.2026-04-23 : Ps\BatPsSecureBootloaderPreserve.ps1
追加: ver.2026-04-23 : Ps\BatPsSecureBootloaderRecovery.ps1 (危険)

980:デフォルトの名無しさん
26/04/28 14:17:02.88 W6oqDl7R.net


981:デフォルトの名無しさん
26/04/28 14:19:07.18 W6oqDl7R.net
うめ

982:デフォルトの名無しさん
26/04/28 14:19:44.45 W6oqDl7R.net


983:デフォルトの名無しさん
26/04/28 14:20:03.97 W6oqDl7R.net


984:デフォルトの名無しさん
26/04/29 10:04:58.16 1CmJ+fMR.net
u

985:デフォルトの名無しさん
26/04/29 10:06:01.33 1CmJ+fMR.net
m

986:デフォルトの名無しさん
26/04/29 10:06:41.24 1CmJ+fMR.net
e

987:デフォルトの名無しさん
26/04/29 14:23:13.80 1CmJ+fMR.net


988:デフォルトの名無しさん
26/04/29 14:23:29.24 1CmJ+fMR.net


989:デフォルトの名無しさん
26/04/29 14:23:43.84 1CmJ+fMR.net
u

990:デフォルトの名無しさん
26/04/29 14:23:57.41 1CmJ+fMR.net
m

991:デフォルトの名無しさん
26/04/29 14:24:28.61 1CmJ+fMR.net
e

992:デフォルトの名無しさん
26/04/29 19:39:27.33 yRjpybQD.net
メカニカルキーボードのFILCOで知られる「ダイヤテック」が事業終了

993:デフォルトの名無しさん
26/04/30 10:03:30.42 WoeOHcw8.net


994:デフォルトの名無しさん
26/04/30 10:03:57.19 WoeOHcw8.net


995:デフォルトの名無しさん
26/04/30 10:04:15.61 WoeOHcw8.net


996:デフォルトの名無しさん
26/04/30 10:04:38.90 WoeOHcw8.net


997:デフォルトの名無しさん
26/04/30 10:04:55.86 WoeOHcw8.net


998:デフォルトの名無しさん
26/04/30 10:05:25.65 WoeOHcw8.net


999:デフォルトの名無しさん
26/04/30 10:05:45.16 WoeOHcw8.net


1000:デフォルトの名無しさん
26/04/30 10:20:36.62 NmSnIhH1.net
援護

1001:デフォルトの名無しさん
26/04/30 10:20:51.93 NmSnIhH1.net
んご

1002:デフォルトの名無しさん
26/04/30 10:21:06.01 NmSnIhH1.net
ンゴ

1003:デフォルトの名無しさん
26/04/30 10:21:19.35 NmSnIhH1.net
e

1004:デフォルトの名無しさん
26/04/30 10:21:31.89 NmSnIhH1.net
n

1005:デフォルトの名無しさん
26/04/30 10:21:44.05 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会員登録はこちら ▼
URLリンク(uplift.5ch.io)

▼ UPLIFTログインはこちら ▼
URLリンク(uplift.5ch.io)

1008:過去ログ ★
[過去ログ]
■ このスレッドは過去ログ倉庫に格納されています


最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch