当文件夹中有超过500个文件时,在文件名的开头和结尾添加标签会陷入循环 - 如何避免这种情况? [重复]

问题描述 投票:0回答:1

这个问题在这里已有答案:

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

COMPANY-1-123456789.dat.txt

代码完全按照应有的方式工作,但是当文件夹中有超过500个文件时,追加功能会一遍又一遍地多次添加前缀和后缀,它不会停止,IE:

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\"
loops batch-file infinite
1个回答
1
投票

简单的FOR命令在迭代之前不会扫描整个目录。而是扫描直到某个缓冲区已满,进程缓冲,然后尝试从中断处继续扫描。但是,如果您重命名了文件,则可能会混淆扫描过程 - 重命名操作可能会更改文件在文件夹列表中的显示位置,以便恢复扫描会选择已重命名的文件。

仅当文件数超过内部FOR缓冲区时才会出现此问题。

修复是使用FOR / F代替DIR / B,因为它在开始迭代之前缓冲DIR命令的整个结果。

for /f "delims=" %%a in ('dir /b /a-d-h-s *.*') do ren "%%a" "COMPANY-1-%%a.TXT"
© www.soinside.com 2019 - 2024. All rights reserved.