Вроде старый вопрос, но если кто-то наткнется на это в надежде на ответ, возможно, это поможет им.
Для запуска из командной строки Windows (CMD.exe) используйте:
setlocal enabledelayedexpansion
for /f "delims=" %a in ('dir /b /s c:\myfolder"') do (@echo %~nxa >>c:\mylist.txt)
endlocal
Выполнение этого из сценария Windows .BAT:
setlocal enabledelayedexpansion
for /f "delims=" %%a in ('dir /b /s c:\myfolder"') do (@echo %%~nxa >>c:\mylist.txt)
endlocal
Вывод может выглядеть примерно так в зависимости от того, какие файлы находятся в папке, в которой вы запускаете код:
file1.fil
file2.fil
file3.fil
ПОНИМАНИЕ, ЧТО ДЕЛАЕТ КОДЕКС
для / f
- означает, что в этом случае запускать циклические файлы с помощью команды
dir /b /s
, чтобы помочь получить имена этих файлов из каталогов (папок) и подкаталогов (подпапок). Как указано в вопросе, это даст вам полный путь к файлам. Так что вместо file.txt вы получите C: \ folder \ file.txt.
"delims ="
- в этом случае сообщает циклу for, что он хочет переменную% a или %% a
иметь только 1 путь к папке и имя файла для каждого цикла.
% a (CMD.exe) %% a (.BAT)
- как упоминалось выше, это переменная, которая меняется с каждым циклом. так
каждый раз команда
dir /b /s
находит новое имя переменной
%% a изменяет имя файла.
- Пример:
Цикл 1: %% a = c: \ folder \ file1.fil
Цикл 2: %% a = c: \ folder \ file2.fil
dir / b / s
- команда для распечатки файлов каталога (папки). От
используя /b
и /s
, спрашивающий добавляет дополнительные критерии.
команда dir
не только распечатывает файлы и каталоги
(папки) в этом каталоге (папке), а также некоторые дополнительные
информация о каталоге.
-
/b
сообщает команде dir, что ей не нужны дополнительные
информация ... только имена файлов.
-
/s
говорит команде dir включить все файлы и
подкаталоги (подпапки) в этой папке.
до
- является частью цикла, которая сообщает, что делать во время этого конкретного
петля. Так что в этом случае это делает только одну команду каждый цикл
(@echo %%~nxa >>c:\mylist.txt)
@ эхо
- - простая команда, которая выводит на экран все, что вы хотите.
экран компьютера или в этом случае в текстовый файл с помощью
@echo %%~nxa
>>c:\mylist.txt
-
>>
до c: \ mylist.txt особенно важно. Каждый раз
цикл происходит, он начинает новую строку в текстовом файле и записывает
переменная в этой строке. Если указан только один >
, он будет перезаписан
строка в текстовом файле каждый раз, когда происходит цикл. Который будет
победить цель того, для чего предназначен этот скрипт.
% ~ nxa (CMD.exe) %% ~ nxa (.BAT)
- - это переменная %% a, как указано выше, за исключением того, что она анализируется (редактируется)
так, как просил спрашивающий @ fightstarr20. Вместо
распечатка переменной как C: \ myfolder \ myfile.fil переменной
распечатает как myfile.fil
-
~
в %%~nxa
сообщает программе, что вы хотите изменить переменную
%% а. В этом случае добавив n
и x
.
n
в %%~nxa
сообщает программе, что вы хотите изменить переменную %% a
исключая путь из переменной.
пример.
-variable %%a = C:\folder\filename.fil
-variable %%~na = filename.
-Если вы заметили, однако, что оно оставляет расширение .fil вне имени файла.
x
в %%~nxa
сообщает программе, что вы хотите изменить переменную %% a
исключив путь и имя файла из переменной, так что все, что вы получите, это расширение имени файла.
так что если вы объедините оба модификатора n
и x
с переменной %% a
Вы получите полное имя файла, включая расширение.
setlocal enabledelayedexpansion
- объяснил просто команду, которая должна быть в сценарии, прежде чем
цикл for, позволяющий изменять или «расширять» переменную %% a.
Endlocal
- это отключает команду setlocal enabledelayedexpansion
Чтобы получить очень полезное объяснение и справочник по командам CMD, я рекомендую прочитать ss64.com и для отличного форума, чтобы получить ответы CMD, я бы порекомендовал dostips.com