Windows 8 menemukan semua drive dan menjalankan perintah pada masing-masing

0

Inilah yang saya miliki sejauh ini

@echo off
for /f "tokens=2 delims==" %%d in ('wmic logicaldisk where "drivetype=3" get name format:value') do echo %%d

output benar

@echo off
FORFILES /P C:\ /S /M *.* /C "cmd /c echo @path"

output benar

@echo off
for /f "tokens=2 delims==" %%d in ('wmic logicaldisk where "drivetype=3" get name format:value') do FORFILES /P %%d\ /S /M *.* /C "cmd /c echo @path"

output tampaknya melaporkan drive yang tidak valid untuk setiap drive pada sistem tetapi saya tidak bisa mendapatkannya untuk memproses %% d sebagai C: \ D: \ etc,

ada saran

Donald
sumber
1
Mengapa menggunakan batch untuk Windows 8? Saatnya memulai PowerShelling, nak!
HopelessN00b
Saya baru belajar hal ini, selangkah demi selangkah, AYAH!
Donald
Nah, Anda bisa belajar dengan PowerShell dan juga batch ... dan Anda akan menemukan Powershell jauh lebih berguna dan berfitur lengkap. Dalam hal ini, bahkan ada ISE PowerShell yang dapat membantu Anda mempelajari dan membuat skrip dengan cara yang Anda tidak akan bisa lakukan dengan batch dan cmd.
HopelessN00b
tetapi apakah power shell berjalan pada OS 32/64 bit dan apakah itu bekerja pada XP vista 7 dan 8, saat ini saya mencoba untuk mempelajari ini dan juga memenuhi kebutuhan yang saya miliki yang berlaku untuk banyak komputer
Donald
Ya!
HopelessN00b

Jawaban:

1

WMIC menghasilkan output unicode, dan FOR / F mengubah output ke ANSI secara tidak benar sehingga ada carriage return tambahan ( <CR>) di akhir setiap baris output.

Jadi drive Anda menjadi C:<CR>\- carriage return mengacaukan perintah.

Salah satu cara untuk menghilangkan karakter yang tidak diinginkan adalah dengan menambahkan loop FOR, yang memotong tepat satu trailing <CR>dari ujung baris, jika ada.

Selain itu, kecuali Windows 8 berbeda dari semua versi sebelumnya, WMIC memerlukan garis miring sebelum opsi FORMAT, seperti pada /format:value

@echo off
for /f "tokens=2 delims==" %%A in (
  'wmic logicaldisk where "drivetype=3" get name /format:value'
) do for %%B in (%%A) do forfiles /p %%B\ /s /m *.* /c "cmd /c echo @path"
dbenham
sumber
Jadi jika saya memahami ini dengan benar, bagian pertama menghasilkan output yang benar kecuali ia memiliki informasi tambahan di dalamnya bahwa dalam bentuk mentah mengacaukan bagian kedua, Anda menambahkan bagian tengah mengekstraksi hanya apa yang kami butuhkan dari bagian pertama mengabaikan informasi tambahan, apakah pemahaman saya benar?
Donald
@ Donald - Ya, Anda mengerti. Jika Anda tertarik melihat char ekstra, Anda dapat melakukan sesuatu seperti (for /f "delims=" %A in ('wmic ...') do @echo %A)>output.txt, dan kemudian memeriksa hasilnya menggunakan hex editor. Anda akan melihat setiap baris diakhiri oleh <CR><CR><LF>, alih-alih yang diharapkan <CR><LF>.
dbenham
Saya menemukan sebuah program bernama - dapat saya sebutkan nama di sini - dan memungkinkan saya untuk mengaktifkan sesuatu yang disebut tampilkan semua karakter, sekarang saya dapat melihat hal-hal tambahan seperti pengembalian tab dan hal-hal seperti itu, apakah ini yang Anda maksudkan.
Donald
@ Donald - Itu mungkin akan berhasil, tapi bukan itu yang saya maksud. Editor heks menunjukkan representasi heksadesimal dua karakter dari setiap byte dalam file, bahkan file biner. Coba pencarian web untuk "hex editor". Ada banyak editor hex freeware yang tersedia.
dbenham
bagaimana seseorang mengarahkan perintah ini ke variabel alih-alih file txt
Donald