1

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

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:

2 ответа2

2

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

Чтобы изменить конкретную букву диска, когда каталог командной строки использует букву диска, отличную от той, на которую нужно изменить, просто используйте параметр /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.


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

0

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

Используйте следующий пакетный файл (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 командой, которую вы хотите запустить в корне каждого диска.

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .