Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows 批处理文件在文件名中查找重复模式,然后处理_Windows_Batch File - Fatal编程技术网

Windows 批处理文件在文件名中查找重复模式,然后处理

Windows 批处理文件在文件名中查找重复模式,然后处理,windows,batch-file,Windows,Batch File,好的,我已经在一个批处理文件上工作了一段时间了,我只是停留在最后一点 我试图完成的是在一个目录中循环,创建一个变量来存储目录中每个文件的文件名,而不带扩展名。然后,对于第一个循环中的每个文件,在不同的目录中循环,并尝试在第二个循环中查找与存储在变量中的名称相同的任何文件名,然后只输出一些简单的文本 例如,在第一个目录中有一个名为imafile-yehyeh.png的文件名,该变量将保存imafile-yehyeh,然后它将循环遍历第二个目录中的所有文件,并为每个文件名输出一条消息,其中包含该模式

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

我试图完成的是在一个目录中循环,创建一个变量来存储目录中每个文件的文件名,而不带扩展名。然后,对于第一个循环中的每个文件,在不同的目录中循环,并尝试在第二个循环中查找与存储在变量中的名称相同的任何文件名,然后只输出一些简单的文本

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

我的脚本正在循环,我能够回显所有变量,文件存在,因为我已经创建了它们,如上所示,但它没有回显
文件名设置为删除

任何帮助都将不胜感激。我的代码如下

@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

感谢@Squashman,答案是删除
set dupe_模式….

然后将FIND命令更改为以下命令:

FIND "%%~nX"

正如前面所指出的,除了不必要地设置变量外,您还使脚本效率低下。对于
dupe_文件夹
中的每个文件,您正在
Echo
调用
kill_文件夹
中的每个文件名,并将其导入到
Find
命令中查找匹配项

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

@Echo关闭
设置“父文件夹=C:\Users\Testing\script”
设置“dupe_folder=DUPEFOLDER”
设置“kill_folder=1扫描\thumb”
CD/D“%父文件夹%”2>Nul | |退出/B
对于(“%kill\u folder%\*”)中的%%A,如果存在请执行“%dupe\u folder%\%%~nA.*”(
Echo%%A已设置为删除。)

您需要在括号内的代码块中设置任何环境变量,并使用延迟扩展。但在您的情况下,不要将FOR变量指定给环境变量。只需在FIND命令中直接使用FOR变量。@Squashman。。。你能告诉我你的意思吗?我不太明白find命令的FOR变量:find“%%~nX”@Squashman Ohh我明白了。。这已经奏效了。。非常感谢
中的%%F(“%parent\u folder%\%kill\u folder%\%%~nX.*”)do(
不需要使用
find
,因为
for
处理模式搜索。有趣的是……这样会更好,非常感谢