2

「UUI」と呼ばれるUSBリムーバブルドライブの文字を検出し、その上にフォルダーを作成するスクリプトを作成しようとしています。個別に実行すると機能する CMD 用のコマンドをいくつか作成しました。ただし、それらをbatファイルに入れると、常にエラーが発生します。以下は、bat ファイル内のコマンドです。

for /F "tokens=1 delims= " %i in ('WMIC logicaldisk where "DriveType=2" list brief ^| c:\windows\system32\find.exe "UUI"') do (echo %i > drive.txt)
set /p RemovableDriveLetter2= < drive.txt
del /F /Q drive.txt
set RemovableDriveLetter=%RemovableDriveLetter2:~0,1%
%RemovableDriveLetter%:
md MyNewFolder
cd MyNewFolder

cmd.exe に移動し、「myScript.bat」または「call myScript.bat」を呼び出してファイルを実行すると、エラーが発生します。

C:\Users\UUI\Desktop>myScript.bat

\windows\system32\find.exe は現時点では予期されていませんでした。

C:\Users\UUI\Desktop>for /F "tokens=1 delims= "\windows\system32\find.exe "UUI"') do (echo i > drive.txt)

C:\ユーザー\UUI\デスクトップ>

MyNewFolder が作成されていないことがわかります。ただし、すべての行をコピーして CMD で (たとえば、.bat ファイルではなく) 実行し、1 つずつ実行すると、cmd.exe インスタンス内で完全に機能します。

問題なく実行され、リムーバブル ドライブのドライブ文字が検出されるバット ファイルを作成するにはどうすればよいですか? または、「\windows\system32\find.exe は現時点では予期されていませんでした。」というエラーを解決するにはどうすればよいですか?

4

1 に答える 1

2

バッチ スクリプトでループ制御変数をマークするために使用される記号を2 倍にする必要があります (または)。つまり、純粋な CLIで使用する代わりに使用します。%FOR.bat.cmd%%i%i

ただし、出力を解析する別のアプローチが考えられwmicます。Dave Benham's WMICand FOR /F: A fix for the Trailing <CR>problemも参照してください。

@echo OFF
SETLOCAL enableextensions
set "USBCounter=0"
for /F "tokens=2 delims==" %%G in ('
    WMIC logicaldisk where "DriveType=2" get DeviceID /value 2^>NUL ^| find "="
') do for /F "tokens=*" %%i in ("%%G") do (
    set /A "USBCounter+=1"
    echo %%i
    rem your stuff here
)
echo USBCounter=%USBCounter%
rem more your stuff here
ENDLOCAL
goto :eof

ここにforループがあります

  • %%G値を取得しDeviceIDます。
  • %%i返される値の末尾のキャリッジ リターンを削除するには:wmic動作: 各出力行は共通の( ) ではなく0x0D0D0A( ) で終了します。CR+CR+LF0x0D0ACR+LF

CaptionまたはNameの代わりに使用できますDeviceID

==>WMIC logicaldisk where "DriveType=2" get /value | find ":"
Caption=F:
DeviceID=F:
Name=F:

次のようなディスクが存在しないか、それ以上存在しない可能性があることに注意してくださいDriveType=2

==>WMIC logicaldisk where "DriveType=2" get /value | find ":"
No Instance(s) Available.

==>WMIC logicaldisk where "DriveType=2" list brief
DeviceID  DriveType  FreeSpace   ProviderName  Size        VolumeName
F:        2          2625454080                3918512128  HOMER
G:        2          999600128                 1029734400  LOEWE

それぞれno、次に1 つ、次に2 つのUSB ドライブのスクリプト出力:

==>D:\bat\SO\31356732.bat
USBCounter=0

==>D:\bat\SO\31356732.bat
F:
USBCounter=1

==>D:\bat\SO\31356732.bat
F:
G:
USBCounter=2

==>
于 2015-07-11T12:52:33.373 に答える