Изменить каталог в Windows Batch Script

687
CmdrShepardsPie

Основываясь на некоторых других ответах, которые я нашел, я могу просмотреть доступные метки дисков. Тем не менее, я не могу перейти на этот диск:

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

Что дает мне:

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

Но я хочу пойти на диск c :, d: и т. Д. И запустить команду.

Я знаю, что обычно я могу сделать что-то вроде

dir %%x 

но я делаю сценарий для сжатия (сжатия) содержимого каждого диска, но он, кажется, не принимает параметр правильно, так как он не просматривает все файлы, когда я это делаю:

compact d: 

которые влияют только на корень d:

против

d: compact 

который влияет на каждый файл и каталог на d:

1
Первый вывод wmic на консоль имеет недостаток, снабжающий окончания строки cr / cr / lf вместо обычного cr / lf. Это можно объяснить. 2-й компакт без аргументов ** показывает ** коэффициент сжатия текущего каталога и его файлов - и больше ничего не делает. Смотрите "compact /?" Или смотрите http://ss64.com/nt/compact.html LotPings 5 лет назад 0

2 ответа на вопрос

2
Pimp Juice IT

Изменить на букву диска

Чтобы изменить конкретную букву диска, когда в каталоге командной строки используется буква диска, отличная от той, на которую нужно изменить, просто используйте /Dпараметр с командой CD (например CD /D <DriveLetter>:), чтобы изменить другую букву диска перед выполнением последующих команд.


Delims

Вы должны опустить с помощью delims="в FOR цикле, как рассказывает, что пространство не является ограничителем, который не то, что вы хотите, чтобы предотвратить эту cr/cr/lfпроблему в соответствии с LotPings комментарий.

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

Так как в нем указывается заданный по умолчанию разделитель пробелов и табуляция, когда вы ставите delims="точно так же, как конечную двойную кавычку после знака равенства =", это говорит о том, что в настоящее время разделителей нет.


компактный

Поскольку Compact работает с файлами в каталоге без указания пути в аргументе, если это применимо, вы можете сначала CD /D <Letter>:запустить, а затем запустить, Compact /Cчтобы сжать все файлы в каталоге или Compact /C /Sрекурсивно сжать все файлы и папки в каталоге.


Пакетный скрипт

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

Примечание. Буква диска указана в <letter>:формате, напримерH: . Так CD /D H:работает просто отлично. Очевидно, вы добавите в \конец итерированного, %%x то есть,%%x\ если вам нужно добавить путь, чтобы использовать полный путь ( %%x\folder\path) в качестве аргумента команды, напримерdir %%x\folder\path .

enter image description here


Дополнительные ресурсы

0
DavidPostill

Тем не менее, я не могу перейти на этот диск

Используйте следующий пакетный файл (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 

Заметки:

  • Замените dirна команду, которую вы хотите запустить в корне каждого диска.

Дальнейшее чтение