使用批处理文件为批量文件名添加前缀时出现问题

使用批处理文件为批量文件名添加前缀时出现问题

我正在尝试为文件夹中的所有文件名添加前缀。

经过几天的互联网搜索,我实际上想出了一些几乎完美的东西:

echo        Please specify fileprefix
echo            Your Choise??
set /p pre= ^
for %%i in (*.txt) do ren %%i "%pre%"%%i

问题是,如果前缀以文件名第一个字符之后的字母顺序的字符开头,则第一个文件将被重命名两次。

以下是尝试重命名测试文件夹中的三个文件1.txt、和 3.txt时的输出:2.txt

Your Choise??
pre

D:\rntest>ren 1.txt "pre"1.txt

D:\rntest>ren 2.txt "pre"2.txt

D:\rntest>ren 3.txt "pre"3.txt

D:\rntest>ren pre1.txt "pre"pre1.txt

给我留下了三份文件pre2.txtpre3.txtprepre1.txt

问题似乎是在处理过程中,第一个文件会自动按字母顺序排序。因此,第一个文件被移到底部,因此需要再次处理。但是,我不知道这是否是实际发生的情况。

在初始重命名之后,我尝试摆弄调试以再次重命名文件。

以下是代码

for %%i in ("%pre%""%pre%"*) do ren %%i %%i:~3%

这似乎可以识别正确的(双前缀)文件名,但它没有做任何事情(文件名不存在或已经有一个相同的文件名)。它应该删除文件名的前三个字符才能给我正确的结果。

我只是认为一定有更好/更简单的方法来做到这一点,而无需检查错误和纠正。

答案1

编辑:与 nerdwaller 评论的类似

您可以dir在循环中使用该命令for /f来帮助您实现预期的行为,如下所示:

@echo off
echo        Please specify fileprefix
echo            Your Choise??
set /p pre=
for /f "tokens=1* delims=" %%i in ('dir /b /o:-n /a:-d *.txt') do ren "%%i" "%pre%%%i"

dir命令开关解释:

/b    - Uses bare format (no heading information or summary).
/o:-n - Sort backwards (helps when you have file named similar names like 1.txt and 11.txt)
/a:-d - Don't give any directories (give files only)

答案2

我发现了一个非常强大的免费实用程序,叫做批量重命名实用程序用于修改 Windows 文件名。

效果很好,我通过 PayPal 捐赠了一些钱;

相关内容