Windowsbatch file循环运行一个额外的迭代

我正在使用Windowsbatch file来一次性重命名大量的文件。 重命名只是为文件名添加一个前缀。 该文件执行正常,除了最后一个文件,前缀以某种方式应用两次。 我不确定我做错了什么。 任何人都可以指出这个问题吗?

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 %%ix%%i dir *.csv echo ==================== ) )>u:\junk.txt&edit u:\junk.txt 

我把上面的批处理文件放在一个干净的目录下面,这个目录下面有一些.CSV文件。 所有它做的是zap当前目录的.csvs,从父目录复制,然后通过前缀重命名。 它显示了不少。

(U:是RAMDRIVE,EDIT执行EDITPLUS; NOTEPAD在这里也可以)

操作取决于添加什么前缀。 开始“a”的前缀与起始“x”的前缀的作用不同。 结果取决于正在使用的文件系统。 NTFS按字母顺序显示文件名,但RAMDRIVE上的FAT系统不会对名称进行排序。

我相信这个问题是由“findnext”文件名机制造成的,并不像预期的那样处理文件名的变化列表。 当它更改一个时,该名称可能会在列表中移动,因此文件可能会重新处理,因为它的新名称再次遇到 – 可能多次。

治愈的方法是用选择来替代

 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" 

另外,你应该寻找任何隐藏的文件。