Ваш код не работает, поскольку сменные параметры for
не позволяют использовать операции подстроки. Необходимо сначала присвоить значение нормальной строке, а затем выполнить операцию подстроки в этой переменной.
Но, поскольку ваш код помещается внутри блока кода (в команде в команде for
), вам также потребуется отсроченное расширение, чтобы иметь возможность извлекать значение переменной, измененной внутри блока.
И, поскольку вывод команды wmic
содержит дополнительные строки (заголовок, который вы пропускали и заканчивали «пустые» строки), вам нужно отфильтровать его вывод только для получения правильных строк (в этом примере линии, которые включает в себя прямую кишку)
@echo off
setlocal enableextensions enabledelayedexpansion
for /f "tokens=2 delims==" %%a in ('
wmic os get localdatetime /format:list
') do set "dateTime=%%a"
set "datetime=%datetime:~0,8%-%datetime:~8,6%"
for /f %%a in ('
wmic logicaldisk get caption
^| find ":"
') do (
set "drive=%%a"
set "drive=!drive:~0,1!"
>"info\info-drive-!drive!-%dateTime%.txt" tree %%a\ /a /f
)
Простейшее альтернативой является непосредственно удалить толстую кишку, включая его в качестве разделителя в for /f
опциях, а затем включить двоеточие в команде, где это необходимо.
@echo off
setlocal enableextensions disabledelayedexpansion
for /f "tokens=2 delims==" %%a in ('
wmic os get localdatetime /format:list
') do set "dateTime=%%a"
set "datetime=%datetime:~0,8%-%datetime:~8,6%"
for /f "tokens=2 delims==:" %%a in ('
wmic logicaldisk get caption /format:list
') do >"info\info-drive-%%a-%dateTime%.txt" tree %%a:\ /a /f
Запросив LogicalDisk заголовок в формате списка, wmic
возвращает строки в формате
Caption=C:
tokens=2 delims==:
делает for /f
процессу линии, как
1 2
v v .......... Tokens
Caption=C:
^^ ......... Delimiters
Как мы только просим второй токен, строки без по меньшей мере двух токенов отбрасываются (это означает, что skip
теперь не требуется). Второй токен, буква диска без двоеточия, хранится в %%a
, а в команде tree
нам нужно включить удаленный двоеточие.
Это работает! Большое спасибо за очень быстрый ответ. – FelixFrog