У меня есть список папок в каталоге, мне нужно скопировать все имя папки в файл, и файл должен быть в одной строке, разделенной разделителями. Может ли помочь мне с этим в пакетном файле.
Спасибо
У меня есть список папок в каталоге, мне нужно скопировать все имя папки в файл, и файл должен быть в одной строке, разделенной разделителями. Может ли помочь мне с этим в пакетном файле.
Спасибо
В пакетном режиме вы бы сделали это так:
@echo off
setlocal EnableDelayedExpansion
for /D %%f in (*.*) do set n=!n!;%%f
if defined n echo %n:~1% > list.txt
endlocal
Чтобы перейти в подпапки, замените /D
на /R
и *.*
.
,
for /R %%f in (.) do set n=!n!;%%f
Добавляя квалификаторы в переменную цикла, вы можете указать, хотите ли вы просто имя папки (%%~nxf
) или полный путь (%%~dpnxf
).
Нет ни одной команды пакетного файла, которая делает то, что вы хотите, но вы можете использовать пакетный файл для выполнения задачи и call
ее самостоятельно. Ответ Ансгара Вичерса имел правильную основную идею (я вижу, что он исправил свою версию после того, как я опубликовал мою).
В любом случае, вот версия, которая будет создавать разделенный точками с запятой список подпапок первого уровня в текущем каталоге или в качестве аргумента, переданного ему в качестве аргумента. Я решил использовать точку с запятой вместо, скажем, запятой, потому что она никогда не может быть частью допустимого имени файла (и запятые могут быть, хотя это редко встречается).
Если в названии папки есть пробелы, оно должно быть заключено в кавычки следующим образом (в противном случае указывать путь к папке в папке необязательно):
subdirs "C:\Documents and Settings"
Обратите внимание, что он выводит список только на консоль (stdout), поэтому, если вы хотите сохранить его в файле, вам нужно добавить > filename.ext
после имени файла сценария (и любого имени папки), чтобы перенаправить вывод в файл на ваш выбор:
subdirs C:\Windows > dirlist.txt
== subdirs.bat ==
@echo off
setlocal EnableDelayedExpansion
pushd %1
for /D %%d in (*.*) do set n=!n!;%%d
if defined n echo %n:~1%
popd
endlocal
Если вы хотите указать полный путь к каждому имени папки, вы можете изменить значение n =!п!; %% d для установки n =!п!; %% ~ fd в строке цикла for .