我正在使用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"
另外,你应该寻找任何隐藏的文件。