如何从批处理文件中的完整路径中提取目录名称?

时间:2010-01-06 15:53:57

标签: cmd

我想根据包含目录的名称重命名目录中的文件,比如

c:\bin\data01\foo.txt

c:\bin\data01\data01.txt

发布帖子How to get folder path from file path with CMD

2 个答案:

答案 0 :(得分:2)

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

之后,您可以使用与目录名称匹配的变量作为副本中的文件名。但是,这只适用于所有路径都相同的深度。

答案 1 :(得分:0)

如果您只需要父目录名称,则可以使用类似于最大嵌套级别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%

基于弗雷泽格雷厄姆的回答