2013-07-27 69 views
1

我需要在Windows 8的批处理文件中的子目录后面重命名一个文件。例如,我需要重命名“C:\ path \ to \ my \ logs \ machine0015 \ 001 .log“到”C:\ path \ to \ my \ machine0015 \ machine0015.log“在DOS下的子目录中重命名一个文件

我需要用last-dir名称完全覆盖文件名。每个目录只有一个相关文件。

我无法解决这个问题。自从我做了任何.bat编程已经很长时间了,我已经设法完成了我需要的其余部分,但最后一点让我难住了。我试着用FINDSTR或FOR循环搞乱,但似乎无法解决如何从完整路径(随机目录名称和路径深度)中提取最后一个子目录的名称。

我被允许编写一个临时文件,但是exe或第三方应用程序会被高度抛弃,可能不允许。这需要在Windows Vista/7/8上运行,而不是XP。

感谢您的帮助,

奥利维尔

回答

2

试试这个:

for %%a in ("C:\path\to\my\logs\machine0015\001.log") do for %%b in ("%%~dpa.") do (
ren "%%~fa" "%%~nb%%~xa" 
move "%%~dpa%%~nb%%~xa" "%%~dpb" 
) 
+0

非常感谢! 我试图理解你在做什么,现在我的头痛。 它的工作原理,除了最后一个移动语句......是否应该将文件移回到一个级别? – OJB

+0

我仍然遇到错误,我花了很多时间做双重验证 - 它确实不是来自我的东西(它部分是),但我认为你的代码正在被空间抛弃,并且在路径和文件名中。 PS:我正在休息一下,从早上开始就在这上面,这是......清晨,再次:-p – OJB

+0

测试它,工作正常。没有空格或']'的问题。 – Endoro

相关问题