我正在使用 Windows 批处理文件一次性重命名大量文件。重命名只是为文件名添加前缀。该文件执行得很好,除了最后一个文件,前缀以某种方式应用了两次。我不确定我做错了什么。谁能给我指出问题?
for %%i in (*.csv) do ren %%i myprefix_%%i
我正在使用 Windows 批处理文件一次性重命名大量文件。重命名只是为文件名添加前缀。该文件执行得很好,除了最后一个文件,前缀以某种方式应用了两次。我不确定我做错了什么。谁能给我指出问题?
for %%i in (*.csv) do ren %%i myprefix_%%i
@echo off
SETLOCAL
DEL *.csv
XCOPY ..\*.csv .
(
for %%i in (*.csv) do (
echo ====================
echo %%i
dir *.csv
ren %%i x%%i
dir *.csv
echo ====================
)
)>u:\junk.txt&edit u:\junk.txt
我在包含几个 .CSV 的目录下的一个干净目录中运行了上述批处理。它所做的只是删除当前目录的 .csvs,从父目录复制这些文件,然后通过前缀重命名。透露了不少。
(U:是 RAMDRIVE,EDIT 执行 EDITPLUS;notepad 也可以在这里执行)
该操作完全取决于添加的前缀。以“a”开头的前缀与以“x”开头的前缀的工作方式不同。并且结果取决于正在使用的文件系统。NTFS 按字母顺序显示文件名,但 RAMDRIVE 上的 FAT 系统不会对名称进行排序。
我相信这个问题是由“findnext”文件名机制没有按预期处理文件名列表的变化引起的。当它更改一个时,该名称可能会在列表中移动,因此文件可能会在再次遇到其新名称时被重新处理 - 可能多次。
治疗方法是将for
选择替换为
for /f "delims=" %%i in ('dir /b *.csv') do (
创建并处理 DIR 列表的位置,因此更改不会影响它。
您的文件名中可能有一些空格。在文件名周围使用双引号。尝试以下操作:
for %%i in (*.csv) do ren "%%I" "myprefix_%%I"
这将执行为:
ren "tmp - Copy.csv" "myprefix_tmp - Copy.csv"
此外,您应该查找任何隐藏文件。