Windows 8 a localisé tous les lecteurs et exécuté la commande sur chaque

0

C'est ce que j'ai jusqu'ici

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

la sortie est correcte

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

la sortie est correcte

@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"

la sortie semble signaler un lecteur non valide pour chaque lecteur du système, mais je ne peux pas le faire pour traiter le %% d comme C: \ D: \ etc,

Aucune suggestion

Donald
la source
1
Pourquoi utiliser batch pour Windows 8? Il est temps de commencer PowerShelling, mon fils!
HopelessN00b
Je viens d'apprendre ce genre de choses, une étape à la fois, papa!
Donald
Eh bien, vous pouvez apprendre avec PowerShell aussi bien que par lots ... et vous trouverez que Powershell est beaucoup plus utile et complet. D'ailleurs, il existe même un PowerShell ISE qui peut vous aider à apprendre et à dynamiser vos scripts de manière que vous n'ayez pas pu faire avec batch et cmd.
HopelessN00b
mais Power Shell fonctionne-t-il sur les systèmes d'exploitation 32/64 bits et fonctionne-t-il sur XP vista 7 et 8, j'essaie maintenant de l'apprendre et je réponds également à un besoin qui s'applique à plusieurs ordinateurs
Donald
Ouaip!
HopelessN00b

Réponses:

1

WMIC génère une sortie unicode et FOR / F convertit la sortie au format ANSI de manière incorrecte, de sorte qu'il existe un retour chariot supplémentaire ( <CR>) à la fin de chaque ligne de sortie.

Ainsi, votre lecteur devient C:<CR>\- le retour chariot perturbe la commande.

Une façon d'éliminer le caractère indésirable consiste à ajouter une boucle FOR supplémentaire, qui en élimine exactement une <CR>à la fin de la ligne, si elle existe.

De plus, à moins que Windows 8 ne soit différent de toutes les versions précédentes, WMIC nécessite une barre oblique avant l'option FORMAT, comme dans /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
la source
Donc, si je comprends bien, la première partie génère la sortie correcte, sauf qu’elle contient des informations supplémentaires qui, dans une forme brute, se mêlent à la seconde partie, vous ajoutez cette partie centrale en extrayant uniquement ce dont nous avions besoin de la première partie en ignorant la informations supplémentaires, ma compréhension est-elle correcte?
Donald
@ Donald - Oui, vous l'avez. Si vous souhaitez voir le caractère supplémentaire, vous pouvez faire quelque chose comme (for /f "delims=" %A in ('wmic ...') do @echo %A)>output.txt, puis examiner le résultat en utilisant un éditeur hexadécimal. Vous verrez chaque ligne terminée par <CR><CR><LF>, au lieu de celle attendue <CR><LF>.
Dbenham
Je suis tombé sur un programme appelé - je peux dire des noms ici - et cela me permet d'activer quelque chose qui s'appelle Afficher tous les caractères. Maintenant, je peux voir des éléments supplémentaires tels que des retours d'onglets et des choses de ce genre.
Donald
@ Donald - Cela fonctionnerait probablement, mais ce n'est pas ce à quoi je faisais allusion. Un éditeur hexadécimal affiche une représentation hexadécimale à deux caractères de chaque octet d'un fichier, même des fichiers binaires. Essayez une recherche sur le Web pour "éditeur hexadécimal". Il existe de nombreux éditeurs hexadécimaux gratuits disponibles.
Dbenham
comment une personne redirigerait-elle cette commande vers une variable au lieu d'un fichier txt
Donald