使用正则表达式将文件批量移动到新文件夹

Batch move file with using regex to new folder

我不是开发人员,我只是在寻找获取代码。

我的文件夹:

default-0.png
default-0@2x.png
default-1.png
default-1@2x.png
default-2.png
default-2@2x.png
default-3.png
default-3@2x.png
default-4.png
default-4@2x.png
default-5.png
default-5@2x.png
default-6.png
default-6@2x.png
default-7.png
default-7@2x.png
default-8.png
default-8@2x.png
default-9.png
default-9@2x.png
...

我只想将文件名为“@2...”的文件和任何文件扩展名移动到“新文件夹”。

default-0@2x.png
default-1@2x.png
default-2@2x.png
default-3@2x.png
default-4@2x.png
default-5@2x.png
default-6@2x.png
default-7@2x.png
default-8@2x.png
default-9@2x.png
...

我正在尝试使用正则表达式:(^.+@2.+.$) 请查看 regex101 以获得完整匹配文本。

我试过我的代码但没有用:

@echo off
setlocal enabledelayedexpansion
for /f %%f in ('dir /b | findstr /r "(^.+@2.+.$)") do (
    md "new folder"
    move "%%~f" "moved folder"
)
Echo done
pause

谁能帮帮我,我哪里错了?

更新:感谢@develc(已回答)和@Mofi(已编辑) 这行得通,我的文件数量完美匹配正则表达式。

md "new folder"
move "*@2x*" "new folder"

另一种方法: 这有效,但 0.1% 不能移动,因为无法检测到文件名有像 example@2x - if comment.png 这样的注释。感谢@Hackoo

的回答
@echo off
MD "new folder">nul 2>&1
setlocal enabledelayedexpansion
for /f %%f in ('dir /b *@2*') do (
    move "%%~f" "new folder"
)
Echo done
pause

你可以尝试类似的方法:

 @echo off
 MD "new folder">nul 2>&1
 setlocal enabledelayedexpansion
 for /f %%f in ('dir /b *@2*') do (
     move "%%~f" "new folder"
 )
 Echo done
 pause

可以这样使用:

md "new folder"
move "*@2x*" "new folder"

在批处理文件中,*a表示结尾的所有内容ab* 表示 b 开头的所有内容; a*b 表示 a 开头并以 b 结尾的所有内容; a?b表示a开头的所有内容,[=33=之间有一个字符]a b 并以 b[=结尾43=]。所以 *everything 的通配符,?every character.

的通配符

参见:MS-DOS 和 Windows 通配符 在 Microsoft 的文档站点上。

通常您的正则表达式语法似乎是正确的。但是当您检查“findstr”文档时,加号 (+) 字符不在接受列表中:)

Findstr 文档:https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/findstr

你可以试试这个:

@echo off
setlocal enabledelayedexpansion
MD "new folder">nul 2>&1
for /f %%f in ('dir /b ^ | findstr /r "(^.*@2.*$)"') do (
    move "%%~f" "new folder"
)
Echo done
pause

也可以使用:

%SystemRoot%\System32\robocopy.exe . "new folder" *@2x.* /MOV /NDL /NFL /NJH /NJS >nul

指定目标文件夹的整个目录树 - 在本例中为当前目录中的子目录 new folder - 由 ROBOCOPY 在移动所有之前不存在时自动创建当前目录中与通配符模式 *@2x.*.

匹配的文件

运行 在命令提示符 window robocopy /? 中获取有关此命令的帮助。

另请参阅: