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

Adding tags to the beginning and end of the filename is stuck in a loop when there are more than 500 files in a folder- How to avoid this?

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

COMPANY-1-123456789.dat.txt

代码运行正常,但是当文件夹中的文件超过 500 个时,append 函数将不断添加前缀和后缀多次,并且不会停止,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\"

简单的 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"