批处理脚本删除文件而不是移动

时间:2018-07-25 22:20:20

标签: batch-file scripting

我仍然是批处理脚本的初学者,因此,如果可能的话,我将比平时更多的解释对我有所帮助。

目的:

我写了这个脚本,试图根据文件名中是否包含文件夹名称来移动文件。例如,我有一个名为“ 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”。感谢您的澄清!

0 个答案:

没有答案