使用正则表达式将文件批量移动到新文件夹
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
表示以结尾的所有内容a; b*
表示 以 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 /?
中获取有关此命令的帮助。
另请参阅:
- SS64.com - A-Z index of Windows CMD commands
- Windows commands
的 Microsoft 文档
- 关于 Naming Files, Paths, and Namespaces
的 Microsoft 文档
- 关于 Using command redirection operators
的 Microsoft 文档
我不是开发人员,我只是在寻找获取代码。
我的文件夹:
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
表示以结尾的所有内容a; b*
表示 以 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 /?
中获取有关此命令的帮助。
另请参阅:
- SS64.com - A-Z index of Windows CMD commands
- Windows commands 的 Microsoft 文档
- 关于 Naming Files, Paths, and Namespaces 的 Microsoft 文档
- 关于 Using command redirection operators 的 Microsoft 文档