首页 > 解决方案 > 批处理脚本删除文件而不是移动

问题描述

我仍然是批处理脚本的初学者,所以如果可能的话,我希望得到比平时更多的解释来帮助我。

目的:

我编写了这个脚本来尝试根据文件名称中是否包含文件夹名称来移动文件。例如,我有一个名为“cow”的文件夹和一个名为“cow_5234.txt”的文件,该文件将被移动到该文件夹​​中。这样做的目的是将带有公司名称的文件从一个充满文件的凌乱文件夹移动到公司文件夹,所以我认为文件进入错误文件夹不会有太大问题。

问题:

我遇到的问题是许多应该传输到文件夹的文件被放错了位置。我在一个文件夹中有大约 3000 个文件以及 300 个文件夹和这个脚本。在我运行它之后,只有大约 100 个文件被放置到正确的文件夹中,而剩下 900 个文件(因为它们没有文件夹名称)而其余的则消失了。

我试图做的事情:

我已经检查并检查了文件夹名称的原始列表,这些都是正确的。然后我修改了脚本以将文件名输出到 .txt 文件而不是移动它。没有获得合理数量的文件,而是有 4000 个文件(我检查了行数)。其中一些文件中没有文件夹名称。然后,我提取了大约 200 个文件和 20 个文件夹的子集,并用它们运行了脚本。由于某种原因,只剩下 80 个文件,其中 1 个被放入了一个文件夹,虽然它没有一个与文件夹相似的字符,其余的就消失了。我完全不确定发生了什么。这是代码:

    @echo off
    dir /a:d /b > list.txt
    for /F %%i in (list.txt) do call :process %%i
    goto :eof

    :process
    set "search=%1"
    for /f "eol=: delims=" %%F in ('dir /A:-D /b^|find "%search%"') do move /Y "%%F" "%search%"
    goto :eof

编辑1:

正如评论中所建议的那样,我在代码块的末尾添加了一个“goto :eof”,但是问题仍然存在。

编辑2:

我没有在主函数的末尾添加“goto :eof”。感谢您的澄清!

标签: batch-filescripting

解决方案


推荐阅读