利用可能なすべてのドライブからUSBにファイルをコピーするバッチスクリプト

利用可能なすべてのドライブからUSBにファイルをコピーするバッチスクリプト

このスクリプトを持っています

    for /f "skip=1 delims=" %%x in ('wmic logicaldisk get caption') do (
    copy "%%x\*.spt" "%drive%\mydiagtools"
)
pause

特定のコンピューター上の利用可能なすべてのディスクから SPT 拡張子を持つファイル (当社独自の会社ファイル) を USB ドライブにコピーする必要があります。

なぜ動作しないのか誰か分かりますか? 出力は次のようになります:

F:\>for /F "skip=1 delims=" %x in
*.spt" "\mydiagtools" )

\*.spt" "\mydiagtools" )
The device is not ready.

\*.spt" "\mydiagtools" )
\*.spt
The filename, directory name, or v
        0 file(s) copied.

\*.spt" "\mydiagtools" )
The device is not ready.

\*.spt" "\mydiagtools" )
The device is not ready.

\*.spt" "\mydiagtools" )
\*.spt
The filename, directory name, or v
        0 file(s) copied.

\*.spt" "\mydiagtools" )
\*.spt
The system cannot find the path sp
        0 file(s) copied.

\*.spt" "\mydiagtools" )
\*.spt
The filename, directory name, or v
        0 file(s) copied.

F:\>pause
Press any key to continue . . .

どうもありがとうございます。

編集:出力を修正しました

答え1

PowerShell を使用しますか? 次のスクリプトを試してください。

$copy=Get-PSDrive -PSProvider FileSystem  |  %{ Get-ChildItem $_.Root -Recurse -force  -ErrorAction SilentlyContinue| Where-Object {$_.Extension -eq '.spt'}} Copy-Item -Path $copy.Fullname -Destination  C:\xxxx\

スクリプトの最後を USB に変更し、PowerShell として実行してください。

答え2

次のコードは動作するはずです:

for /f "skip=1" %%x in ('wmic logicaldisk get caption') do (
    copy "%%x\*.spt" "%drive%\mydiagtools"
)
pause

私にとっては価値がないにもかかわらず%drive%、問題は に関連しているようでしたdelims=。 がなければ、ドライブの内容を正常に一覧表示してコピーできましたが、 はdelims=望ましくない副作用を引き起こし、ファイルが表示またはコピーされませんでした。

(Windows 10 Enterprise x64 バージョン 1803 ビルド 10.0 でテスト済み)17134.376

関連情報