【问题标题】:Batch Created Folder By Filename Part and Move通过文件名部分和移动批量创建文件夹
【发布时间】:2014-12-08 16:31:41
【问题描述】:

我找到了 magoo 的帖子并一直在玩它。我似乎无法让 DIR 部分解析出文件名以创建文件夹并将文件移动到相应的文件夹中。以下是我正在使用的文件的示例:

...
800.1.gif
800.2.gif
800.3.jpg
801.1.gif
801.2.jpg
801.3.gif
...

批处理应创建文件夹 800 和 801 并分别移动 800.X 和 801.X 文件。我已经尝试过 FINDSTR 和其他面具,但运气不佳。

这里是magoo的原始批处理代码(来源:http://bit.ly/1ua8IIF):

@ECHO OFF
SETLOCAL
SET "sourcedir=c:\sourcedir"
PUSHD %sourcedir%
FOR /f "tokens=1*" %%a IN (
 'dir /b /a-d "*_*_*-*-* *.*"'
 ) DO (  
 ECHO MD %%a
 ECHO MOVE "%%a %%b" .\%%a\
)
POPD
GOTO :EOF

几个小时后我的尝试:

@ECHO OFF
SETLOCAL
SET "sourcedir=c:\sourcedir"
PUSHD %sourcedir%
FOR /f "tokens=1*" %%a IN (
 'dir /b /a-d ^|findstr /r "\.[1-9]"'
 ) DO (  
 ECHO MD %%a
 ECHO MOVE "%%a %%b" .\%%a\
)
POPD
GOTO :EOF

我仍然在玩它,但任何帮助将不胜感激!

【问题讨论】:

    标签: windows batch-file directory dir findstr


    【解决方案1】:

    你需要做的修改是:

    FOR /f "tokens=1*delims=." %%a IN (
    

    添加delims=. 意味着“将. 视为分隔符”。原来,使用了默认的分隔符Space。

     'dir /b /a-d "*.*.gif" "*.*.jpg"'
    

    对匹配*.*.gif或*.*.jpg的文件执行目录列表

    引号是不必要但无害的。在原始文件中,文件掩码需要在掩码字符串中包含空格;空格是分隔符,引用字符串会删除特殊含义。

    这将匹配匹配任一扩展名的任何文件。如果您想匹配*.*.* 模式的任何文件,请随意将其更改为

     'dir /b /a-d *.*.*'
    

    终于,

     ECHO MOVE "%%a.%%b" .\%%a\
    

    这只是通过重新插入由for 解析出来的. 来重建原始字符串的问题 - 在本例中为. 但在原始空格

    【讨论】:

    • 非常感谢。我刚刚发现了delims。这会节省我更多的时间,而不是摆弄 FINDSTR 正则表达式 - 啊!再次感谢 Magoo!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-01
    • 2017-06-07
    • 1970-01-01
    • 2019-11-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-30
    相关资源
    最近更新 更多