Как извлечь имя каталога из полного пути в командном файле? - PullRequest
0 голосов
/ 06 января 2010

Я хочу переименовать файлы в каталоге на основе имени содержащего каталога, например

c:\bin\data01\foo.txt

до

c:\bin\data01\data01.txt

после записи Как получить путь к папке из пути к файлу с помощью CMD .

Ответы [ 2 ]

2 голосов
/ 06 января 2010

У Microsoft есть хороший пакетный справочник, в котором объясняется, как можно выполнить цикл for, чтобы токенизировать путь к файлу и извлечь имя каталога ...

http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/batch.mspx?mfr=true

Если у вас есть файл, содержащий список файлов, tmp.txt ...

c:\temp\folder\foo.txt

вы можете разобрать эти имена файлов в пакетном режиме с помощью ...

for /F "delims=\ tokens=1,2,3" %%i in (tmp.txt) do call echo %%i %%k %%j

и это производит ...

%%i = c: 
%%j = temp
%%k = folder

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

0 голосов
/ 02 декабря 2010

Если вам нужно только имя родительского каталога, вы можете использовать что-то вроде следующего, которое работает для максимального уровня вложенности 10.

ECHO %~p0>path.txt    
FOR /F "tokens=1,2,3,4,5,6,7,8,9,10 delims=\" %%G in (path.txt) DO (
IF NOT [%%G]==[] SET myVar=%%G
IF NOT [%%H]==[] SET myVar=%%H
IF NOT [%%I]==[] SET myVar=%%I
IF NOT [%%J]==[] SET myVar=%%J
IF NOT [%%K]==[] SET myVar=%%K
IF NOT [%%L]==[] SET myVar=%%L
IF NOT [%%M]==[] SET myVar=%%M
IF NOT [%%N]==[] SET myVar=%%N
IF NOT [%%O]==[] SET myVar=%%O
IF NOT [%%P]==[] SET myVar=%%P
)
DEL path.txt /F /Q
ECHO %myVar%

На основании ответа Фрейзера Грэма

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...