Ändern Sie das Verzeichnis in Windows Batch Script

873
CmdrShepardsPie

Basierend auf einigen anderen Antworten, die ich gefunden habe, kann ich verfügbare Laufwerks-Labels durchlaufen. Ich kann jedoch nicht zu diesem Laufwerk wechseln:

for /f "skip=1 delims=" %%x in ('wmic logicaldisk get caption') do ( %%x dir ) 

Was gibt mir:

PS C:\> .\something.bat  C:\>for /F "skip=1 delims=" %x in ('wmic logicaldisk get caption') do ( %x dir )  C:\>( : dir ) The filename, directory name, or volume label syntax is incorrect. Volume in drive C has no label. Volume Serial Number is 9CE0-91A0  Directory of C:\  07/14/2018 09:54 AM 1,586 compact-all.bat 06/25/2018 01:03 PM <JUNCTION> Documents and Settings [C:\Users] 07/14/2018 08:03 AM <DIR> Fraps 06/25/2018 01:07 PM <DIR> Intel 06/25/2018 02:18 PM <DIR> NVIDIA 04/11/2018 05:38 PM <DIR> PerfLogs 07/13/2018 08:32 AM <DIR> Program Files 07/13/2018 04:56 PM <DIR> Program Files (x86) 06/25/2018 02:12 PM <DIR> Python27 07/14/2018 12:26 PM 7,404 result.txt 07/14/2018 12:26 PM 83 something.bat 06/25/2018 01:08 PM <DIR> Users 06/30/2018 02:19 PM <DIR> Windows 3 File(s) 9,073 bytes 10 Dir(s) 84,364,111,872 bytes free  C:\>( : dir ) The filename, directory name, or volume label syntax is incorrect. Volume in drive C has no label. Volume Serial Number is 9CE0-91A0  Directory of C:\  07/14/2018 09:54 AM 1,586 compact-all.bat 06/25/2018 01:03 PM <JUNCTION> Documents and Settings [C:\Users] 07/14/2018 08:03 AM <DIR> Fraps 06/25/2018 01:07 PM <DIR> Intel 06/25/2018 02:18 PM <DIR> NVIDIA 04/11/2018 05:38 PM <DIR> PerfLogs 07/13/2018 08:32 AM <DIR> Program Files 07/13/2018 04:56 PM <DIR> Program Files (x86) 06/25/2018 02:12 PM <DIR> Python27 07/14/2018 12:26 PM 7,404 result.txt 07/14/2018 12:26 PM 83 something.bat 06/25/2018 01:08 PM <DIR> Users 06/30/2018 02:19 PM <DIR> Windows 3 File(s) 9,073 bytes 10 Dir(s) 84,364,111,872 bytes free  C:\>( : dir ) The device is not ready. Volume in drive C has no label. Volume Serial Number is 9CE0-91A0  Directory of C:\  07/14/2018 09:54 AM 1,586 compact-all.bat 06/25/2018 01:03 PM <JUNCTION> Documents and Settings [C:\Users] 07/14/2018 08:03 AM <DIR> Fraps 06/25/2018 01:07 PM <DIR> Intel 06/25/2018 02:18 PM <DIR> NVIDIA 04/11/2018 05:38 PM <DIR> PerfLogs 07/13/2018 08:32 AM <DIR> Program Files 07/13/2018 04:56 PM <DIR> Program Files (x86) 06/25/2018 02:12 PM <DIR> Python27 07/14/2018 12:26 PM 7,404 result.txt 07/14/2018 12:26 PM 83 something.bat 06/25/2018 01:08 PM <DIR> Users 06/30/2018 02:19 PM <DIR> Windows 3 File(s) 9,073 bytes 10 Dir(s) 84,364,111,872 bytes free  C:\>(  dir ) Volume in drive C has no label. Volume Serial Number is 9CE0-91A0  Directory of C:\  07/14/2018 09:54 AM 1,586 compact-all.bat 06/25/2018 01:03 PM <JUNCTION> Documents and Settings [C:\Users] 07/14/2018 08:03 AM <DIR> Fraps 06/25/2018 01:07 PM <DIR> Intel 06/25/2018 02:18 PM <DIR> NVIDIA 04/11/2018 05:38 PM <DIR> PerfLogs 07/13/2018 08:32 AM <DIR> Program Files 07/13/2018 04:56 PM <DIR> Program Files (x86) 06/25/2018 02:12 PM <DIR> Python27 07/14/2018 12:26 PM 7,404 result.txt 07/14/2018 12:26 PM 83 something.bat 06/25/2018 01:08 PM <DIR> Users 06/30/2018 02:19 PM <DIR> Windows 3 File(s) 9,073 bytes 10 Dir(s) 84,364,111,872 bytes free PS C:\> 

Was ich aber möchte, ist, zu c :, d: usw. zu gehen und einen Befehl auszuführen.

Ich weiß normalerweise könnte ich so etwas machen

dir %%x 

Ich mache jedoch ein Skript, um den Inhalt jedes Laufwerks zu komprimieren (zu komprimieren), aber es scheint, dass der Parameter nicht korrekt verwendet wird, da er nicht alle Dateien durchläuft, wenn ich dies tue:

compact d: 

die nur die Wurzel von d betreffen:

gegen

d: compact 

was alle Dateien und Verzeichnisse auf d betrifft:

1
Die erste wmic-Ausgabe an die Konsole hat einen Fehler, der die Zeilenenden cr / cr / lf anstelle der üblichen cr / lf liefert. Dies kann berücksichtigt werden. 2nd compact ohne Argumente ** zeigt ** die Kompressionsrate des aktuellen Verzeichnisses und seiner Dateien - und sonst nichts. Siehe "compact /?" Oder sehen Sie http://ss64.com/nt/compact.html LotPings vor 5 Jahren 0

2 Antworten auf die Frage

2
Pimp Juice IT

Wechseln Sie zu Laufwerksbuchstaben

Um zu einem bestimmten Laufwerksbuchstaben zu wechseln, während das Eingabeaufforderungsverzeichnis einen anderen Laufwerksbuchstaben verwendet als den, zu dem Sie wechseln müssen, verwenden Sie einfach den /DParameter mit dem CD- Befehl (z. B. CD /D <DriveLetter>:), um zu einem anderen Laufwerksbuchstaben zu wechseln, bevor Sie fortlaufende Befehle ausführen.


Delims

Sie sollten die Verwendung der FORdelims=" in der FOR- Schleife auslassen, da dies bedeutet, dass Leerzeichen kein Trennzeichen sind. Dies ist nicht das, was Sie cr/cr/lfgemäß LotPings- Kommentar verhindern möchten .

  • FOR /?
     delims=xxx - specifies a delimiter set. This replaces the default delimiter set of space and tab. 

Da es die Standardbegrenzung für Leerzeichen und Tabulatoren angibt, wenn Sie delims="genau das mit dem abschließenden doppelten Anführungszeichen nach dem Gleichheitszeichen setzen, bedeutet dies =", dass jetzt keine Trennzeichen vorhanden sind.


Kompakt

Da Compact läuft gegen Dateien im Verzeichnis ohne den Pfad in einem Argumente zu spezifizieren, falls zutreffend, können Sie zunächst CD /D <Letter>:und führen Sie dann Compact /Calle Dateien in einem Verzeichnis zu komprimieren, oder Compact /C /Salle Dateien und Ordner rekursiv in dem Verzeichnis zu verdichten.


Batch-Skript

for /f "skip=1" %%x in ('wmic logicaldisk get caption') do ( CD /D %%x Compact /C /S <Next or other command> ) 

Hinweis: Der Laufwerkbuchstabe wird in einem <letter>:Format aufgeführt, zH: . Funktioniert also CD /D H:gut. Sie werden natürlich das \am Ende der Iteration hinzufügen, %%x dh%%x\ wenn Sie einen Pfad anhängen müssen, um einen vollständigen Pfad ( %%x\folder\path) als Befehlsargument zu verwenden, zdir %%x\folder\path .

enter image description here


Weitere Ressourcen

  • CD

     Key /D : change the current DRIVE in addition to changing folder. 
  • Kompakt

    Key  /C Compress the specified files. Directories will be marked so that files added afterward will be compressed.  /S Perform the specified operation on files in the given directory and all subdirectories.  Default "dir" is the current directory. 
  • Ich brauche eine .bat für compact.exe und ignoriere Dateitypen?

0
DavidPostill

Ich kann jedoch nicht zu diesem Antrieb wechseln

Verwenden Sie die folgende Batchdatei (test.cmd):

@echo off setlocal enabledelayedexpansion rem skip=1 to remove the header rem findstr to remove blank lines for /f "skip=1" %%d in ('wmic logicaldisk get caption ^| findstr /r /v "^$"') do ( cd /d %%d\ dir ) endlocal 

Anmerkungen:

  • Ersetzen Sie dirdurch den Befehl, den Sie im Stammverzeichnis jedes Laufwerks ausführen möchten.

Lesen Sie weiter