有点奇怪的事发生在我身上。 几年前我将一个重命名的批处理文件放在一起(在各个地方提供了大量帮助,包括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"))
答案 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"
),这将与之一起使用。