我想根据包含目录的名称重命名目录中的文件,比如
c:\bin\data01\foo.txt
到
c:\bin\data01\data01.txt
答案 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%
基于弗雷泽格雷厄姆的回答