skrip batch untuk menyalin file dari semua drive yang tersedia ke USB

0

Saya punya skrip ini

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

dan saya membutuhkannya untuk menyalin file dengan ekstensi SPT (file perusahaan milik kami) ke drive USB saya dari semua disk yang tersedia di komputer tertentu.

Adakah yang tahu mengapa ini tidak berhasil? Ini output yang saya dapatkan:

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 . . .

Terima kasih banyak

sunting: mengoreksi output

yssup
sumber
2
Di mana% drive% didefinisikan?
mt025
Apakah Anda mencoba menyalin file yang terletak di folder mana saja di setiap drive? Karena skrip ini hanya akan menyalin file yang terletak di folder root, setelah diperbaiki. Menjadi Anda terbatas pada maksimal 26 drive pada Windows dan saya ragu Anda memiliki jumlah yang mendekati itu, mengapa Anda tidak hanya menggunakan kembali perintah satu-liner sederhana dengan xcopyatau robocopyuntuk melakukan ini secara manual pada beberapa drive yang Anda miliki?
Appleoddity
@ mt025 Saya tidak yakin di mana% drive% didefinisikan, saya kira itu adalah variabel lingkungan label USB drive atau drive dari mana file batch dieksekusi. Ini berfungsi ketika saya melakukan copy "c:\fielfor.spt" "%drive%\mydiagtools"@Appleoddity Ya, saya mencoba menyalin file yang terletak di folder mana saja di setiap drive ke folder tertentu di drive USB saya. Kami memiliki banyak komputer dan setiap komputer memiliki jumlah drive yang berbeda dan huruf mereka juga berbeda-beda.
yssup

Jawaban:

0

Anda ingin menggunakan PowerShell? Silakan coba skrip berikut.

$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\

Di akhir skrip, harap diubah menjadi USB Anda, lalu jalankan sebagai PowerShell.

OOOO
sumber
Saya tidak ingin menggunakan PowerShell. Saya harus menggunakan command prompt biasa.
yssup
0

Kode berikut harus berfungsi:

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

Meskipun %drive%tidak memiliki nilai bagi saya, masalah tersebut tampaknya terkait dengan delims=. Tanpanya, saya bisa membuat daftar dan menyalin konten drive, yang delims=menyebabkan efek samping yang tidak diinginkan untuk tidak menampilkan atau menyalin file apa pun.

(diuji di bawah Windows 10 Enterprise x64 versi 1803 build 10.0. 17134.376 )

script'n'code
sumber