重命名BAT突然无法正常工作

时间:2016-04-22 19:03:38

标签: batch-file cmd file-rename batch-rename

有点奇怪的事发生在我身上。 几年前我将一个重命名的批处理文件放在一起(在各个地方提供了大量帮助,包括StackOverflow),用于我正在进行的项目。 它会重命名一些文件,并用父文件夹中的前5个字符作为前缀(即' 12345 - Site')。 我没有使用BAT文件好几个月,现在有需要,但是它无法正常工作。

它正在重命名文件,但它使用整个父文件夹而不是前5个字符。我已经在另一台PC上测试了它并在以前工作过的文件夹中运行它。

有没有人知道为什么会发生这种情况,如何修复它,或者我可以添加到批处理文件中以获得相同的结果?

请注意,我是一个完整的新手,花了很多个晚上让第一批文件通过反复试验,并在Web上切割和粘贴类似的批处理文件请求。

我目前的代码:

for %%z in ("%cd%") do (
for %%a in ("%%~dpz%\.") do (
for /f "delims=" %%i in ('dir  /b /a-d *.pdf,*.xlsx,*.docx,*.xlsm') do move "%%i" "%%~nxz %%i"))

1 个答案:

答案 0 :(得分:3)

这应该适合你。

for %%z in ("%cd%") do (
    for %%a in ("%%~dpz%\.") do (
        for /f "delims=" %%i in ('dir  /b /a-d *.pdf,*.xlsx,*.docx,*.xlsm') do call :renameStuff "%%i" "%%~nxz"
        )
    )
goto :eof

:renameStuff
set "originalName=%~1"
set "parentFolder=%~2"
echo move "%originalName%" "%parentFolder:~0,5% %originalName%"
exit /b

您要查找的具体位是%parentFolder:~0,5%,它从字符0开始占用%parentFolder%的子字符串,并在5个字符后停止。这将为您提供前5个字符。

棘手的是,你不能在for循环%%z类型变量上使用它。因此,您必须将其传递给另一个变量。此外,因为你有一些嵌套循环延迟扩展使得这真的很难看,所以我把变量传递给一个子程序(call :renameStuff "%%i" "%%~nxz"),将它们变成%1%2类型变量,然后将其传递给普通变量(set "originalName=%~1"),这将与之一起使用。