我有很多文件夹,它们具有以下命名约定:
- 文件夹1(1924)
- 文件夹2(2014)
- 文件夹3(1999)
- 文件夹4(2001)
- 文件夹5(1891)
现在我想在资源管理器中移动/查找所有年份(介于 之间()
)低于 2000 年且高于 1900 年的文件夹
因此输出将是folder1和folder3。
是否有任何脚本可以做到这一点?
答案1
如果所有这些文件夹都在,C:\Source folder
则从其自身运行以下批处理文件C:\Source folder
:
@echo off
set dest=D:\Target folder
for /f "tokens=1,2 delims=()" %%d in ('dir /ad /b') do (
if %%e gtr 1900 (
if %%e lss 2000 (
if not exist "%dest%\%%d(%%e)\" md "%dest%\%%d(%%e)"
robocopy "%%d(%%e)" "%dest%\%%d(%%e)" /e /is /move
)
)
)
答案2
下面是执行此操作的一个示例方法(假设所有目录都在同一级别)
find . -type d -name "fold*" -maxdepth 1|awk -F'[()]' '{if ($2 > 1900 && $2 < 2000) print $0}'
如果您想在 Windows 操作系统下执行它,示例方法是使用一些 cygwin 环境(mobaxterm 也可以正常工作)并在终端中运行它。不幸的是,我的 Windows 技能非常有限,我无法将其重写为本机 cmd 脚本