1

У меня есть список папок в каталоге, мне нужно скопировать все имя папки в файл, и файл должен быть в одной строке, разделенной разделителями. Может ли помочь мне с этим в пакетном файле.

Спасибо

2 ответа2

1

В пакетном режиме вы бы сделали это так:

@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).

0

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

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