Как сделать выходное имя файла равным имени папки

Я создал пакетный файл для вывода содержимого папки в список имен.

@echo off
cd /d %1
Title %~f1
dir %1 /b /l > %1\..\file_list.txt

Как я могу сделать file_list.txt «имя каталога».txt?

Например, я нахожусь в папке ABC и хочу вывести список каталогов, чтобы окончательный текстовый файл назывался ABC.txt вместо file_list.txt.

Редактировать: Спасибо Alconja, это работает отлично. Поскольку это информационный и обучающий сайт, не могли бы вы расширить свой ответ, чтобы объяснить параметры, которые вы добавляете?


person qwertyuu    schedule 03.04.2009    source источник


Ответы (2)


Основываясь на обсуждении здесь, я думаю, что вы после:

@echo off&setlocal enableextensions
Title %~f1
for %%* in (%1) do set MyDir=%%~n*
dir %1 /b /l > %1\..\"%MyDir%.txt"
endlocal&goto :eof

Дал быстрый тест и, кажется, делает то, что вы хотите

...предоставляется как есть/без гарантий/и т.д. :)

person Alconja    schedule 03.04.2009
comment
Круто, я не привык к этим расширениям. - person lc.; 03.04.2009

Я не думаю, что есть простой способ получить только последнюю часть текущего пути только в пакетном сценарии.

Но если на вашем компьютере установлен sed, это становится относительно просто:

@echo off
cd /d %1
Title %~f1
for /F "usebackq delims=" %%i in (`"pwd | sed -e ""{s/.*\\//g}"""`) do dir %1 /b /l > %1\..\%%i.txt

Исправление: ответ Alconja правильный . По-видимому, с расширениями для пакетных сценариев это возможно. (Теперь я тоже понимаю ~f). Итак, вам больше не нужен sed, и это сводится к:

@echo off
cd /d %1
Title %~f1
for /F "usebackq delims=" %%i in (`pwd`) do dir %1 /b /l > %1\..\%%~ni.txt

Возможно, поскольку вы меняете каталог, вам не нужен %1 в выходном пути или команда dir, и вы должны просто заменить %1 на путь, поэтому вы можете попробовать (не проверено):

@echo off
cd /d %1
Title %~f1
dir /b /l > ..\%~n1.txt
person lc.    schedule 03.04.2009
comment
Это работает отлично. Я сохранил его в контекстном меню SendTo. - person qwertyuu; 03.04.2009