Loops 当文件夹中有500多个文件时,向文件名的开头和结尾添加标记会陷入循环-如何避免这种情况?

Loops 当文件夹中有500多个文件时,向文件名的开头和结尾添加标记会陷入循环-如何避免这种情况?,loops,batch-file,infinite,Loops,Batch File,Infinite,我们从一个组织接收文件,文件名通常是数字:123456789.dat,我有一个批处理脚本,该脚本将为文件名添加前缀和新后缀,即: COMPANY-1-123456789.dat.txt 代码的工作原理与它应该的完全一样,但当文件夹中有500多个文件时,append函数将不断多次添加前缀和后缀,并且不会停止,即: COMPANY-1-COMPANY-1-COMPANY-1-COMPANY-1-123456789.dat.txt.txt.txt.txt 我必须终止批处理脚本,并将文件数分成两

我们从一个组织接收文件,文件名通常是数字:123456789.dat,我有一个批处理脚本,该脚本将为文件名添加前缀和新后缀,即:

COMPANY-1-123456789.dat.txt
代码的工作原理与它应该的完全一样,但当文件夹中有500多个文件时,append函数将不断多次添加前缀和后缀,并且不会停止,即:

COMPANY-1-COMPANY-1-COMPANY-1-COMPANY-1-123456789.dat.txt.txt.txt.txt  
我必须终止批处理脚本,并将文件数分成两个较小的组,这样就可以了。不幸的是,我不会总是在身边抓住这个问题,我想防止这种情况再次发生

我在互联网上进行了详尽的搜索,但没有找到任何与我正在寻找的内容相类似的内容。如果这个问题在其他地方存在,你能告诉我这个问题吗?我们将不胜感激

我们有几家不同的公司每天向我们发送大量文件,因此我粘贴的代码至少涉及10家不同的公司;它基本上是在一个批处理文件中重复下面的代码段。只有一家公司向我们发送了500多个文件,我需要手动将它们分成两组,以使代码正常工作。任何超过500的都会陷入循环。如有任何建议,将不胜感激

CHDIR /D "v:\DIR\COMPANY_NAME\ORIGFILE"
for %%a in (*.*) do ren "%%a" "COMPANY-1-%%a.TXT"
XCOPY /Q /Y "*.TXT" "C:\Local_dir\Sub_Folder\"
MOVE /Y "*.TXT" "COMPLETED\"

simple FOR命令在迭代之前不会扫描整个目录。相反,它会扫描到某个缓冲区已满,然后处理该缓冲区,然后尝试在停止扫描的地方继续扫描。但是,如果您重命名了文件,则可能会混淆扫描过程-重命名操作可能会更改文件在文件夹列表中的显示位置,以便恢复的扫描拾取已重命名的文件

只有当文件数超过内部缓冲区时,才会出现此问题

修复方法是将FOR/F与DIR/B一起使用,因为这会在DIR命令开始迭代之前缓冲整个结果

for /f "delims=" %%a in ('dir /b /a-d-h-s *.*') do ren "%%a" "COMPANY-1-%%a.TXT"

如果原始文件有一个.datextension,为什么不在for命令中使用它呢?对于%%a in*.dat do ren%%a公司-1-%%a。TXT@LotPings并非所有文件都具有*.dat扩展名。我使用**包含所有扩展名。**是问题所在吗?症状表明文件被多次处理,输入端是否也有.txt文件?我无法复制您的问题,但我有一个理论,它是由**引起的,如果您将其更改为dir/b*,它可能会得到修复。这可能是由于超过了最大字符串大小,或者是由于重命名文件时文件的顺序发生了变化,并且**不断检查而不是只检查一次。更改%%a in**do ren%%a COMPANY-1-%%a.TXT by for/F delims=%%a in'dir/a:-D/B*'do ren%%a COMPANY 1-%%a.TXT这实际上会重命名我的输出文件夹,位于以下目录中:v:\DIR\COMPANY\u NAME\ORIGFILE。输出文件夹名为v:\DIR\COMPANY\u NAME\ORIGFILE\COMPLETED。有没有其他方法不重命名文件夹,只重命名文件?谢谢你。@rtuteur-Oops,是的。我忘了包括/a-d-h-s来模拟FOR的输出。-d排除目录,-h排除隐藏文件,-s排除系统文件。我编辑了答案。也感谢他的作品!非常感谢。