按文件名部件和移动批量创建文件夹

时间:2014-12-08 16:31:41

标签: windows batch-file directory dir findstr

我找到了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

我还在玩它,但任何帮助都会非常感激!

1 个答案:

答案 0 :(得分:1)

您需要进行的修改是:

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

添加delims=.表示“将.视为分隔符。”在原始版本中,使用了默认分隔符 Space

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

对匹配*.*.gif*.*.jpg

的文件执行目录列表

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

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

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

最后,

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

只需重新插入由.解析的for来重建原始字符串,在这种情况下.,但在原始空间中