批处理文件在文件名中定位重复模式然后处理

时间:2018-04-13 01:46:09

标签: windows batch-file

好的,我已经在批处理文件上工作了一段时间了,我只是停留在最后一点。

我想要完成的是循环遍历目录,创建一个变量,该变量将每个文件的文件名存储在没有扩展名的目录中。然后对于第一个循环中的每个文件,循环遍历不同的目录并尝试在第二个循环中找到与变量中存储的名称相同的任何文件名,然后只输出一些简单的文本。

例如,假设在第一个目录中有一个名为imafile-yehyeh.png的文件名,该变量将保存imafile-yehyeh,然后它将循环遍历第二个目录中的所有文件,并为每个文件输出一条消息其中包含该模式的文件名,因此如果第二个目录中的文件名为imafile-yehyeh_01.mp4或imafile-yehyeh-newtitle.jpg,则它们将匹配该模式并输出一条消息。

我的脚本循环播放,我能够回显所有变量,文件存在,因为我完全按照上面的说明创建了它们,但它没有回显filename is set for deletion行。

非常感谢任何帮助。我的代码如下;

@echo off

set "parent_folder=C:\Users\Testing\script"

set "dupe_folder=DUPEFOLDER"
set "kill_folder=1 SCANNED\thumb"

setlocal enableDelayedExpansion
for %%X in ("%parent_folder%\%dupe_folder%\*") do (
    set dupe_pattern=%%~nX

    for %%F in ("%parent_folder%\%kill_folder%\*") do (
        echo %%~nF | FIND "%dupe_pattern%" 1>NUL && (
            echo %%~F is set for deletion.
        )
    )
)

endlocal

2 个答案:

答案 0 :(得分:1)

感谢@Squashman,答案是删除set dupe_pattern....

然后将FIND命令更改为以下内容;

FIND "%%~nX"

答案 1 :(得分:0)

除了不必要地设置变量之外,正如已经指出的那样,你也使得脚本效率低下。对于dupe_folder中的每个文件,您Echo kill_folder中的每个文件名,并将其汇总到Find命令中寻找匹配项。

这是一种更简单的方法,(它匹配的文件名以相同的字符串开头,后跟一个点,而不是任何包含字符串的文件名)

@Echo Off
Set "parent_folder=C:\Users\Testing\script"
Set "dupe_folder=DUPEFOLDER"
Set "kill_folder=1 SCANNED\thumb"

CD /D "%parent_folder%" 2>Nul || Exit /B
For %%A In ("%kill_folder%\*") Do If Exist "%dupe_folder%\%%~nA.*" (
    Echo %%A is set for deletion.)