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

StackOverflow https://stackoverflow.com/questions/712556

  •  23-08-2019
  •  | 
  •  

Вопрос

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

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

Как я могу сделать file_list.txt быть "Dir name" .txt?

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

РЕДАКТИРОВАТЬ: Спасибо, Альконья, это работает отлично. Поскольку это информационный и учебный сайт, вы не могли бы вы расширить свой ответ, чтобы объяснить добавляемые вами параметры?

Это было полезно?

Решение

На основе обсуждения здесь, Я думаю, что это то, что вам нужно:

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

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

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

Другие советы

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

Но если у вас есть Сед На вашей машине это становится относительно легко:

@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

Исправление: Ответ Альконья правильно. Очевидно, с расширениями до партийных сценариев это возможно. (Теперь я тоже понимаю ~ 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
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top