我找到了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
我还在玩它,但任何帮助都会非常感激!
答案 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
来重建原始字符串,在这种情况下.
,但在原始空间中1} KBD>