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


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

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"

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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.