批处理:根据文件名的一部分创建一个文件夹,然后将文件复制到其中

时间:2015-01-02 20:31:46

标签: batch-file batch-processing

我有一个带有一堆.avi和.wav文件的文件夹。他们的名字如下:

{NameX}_{DateX}

我需要一个创建名为{Name1}{Name2}等文件夹的表达式,然后将相应的文件复制到这些文件夹中。

提前致谢!

编辑:对不起,这是我到目前为止所尝试的内容。

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

虽然没用,但我不知道为什么。

这是一个具体的文件名,我认为它可能有所帮助。

hl2_2014_12_26_04_05_12_268.avi

1 个答案:

答案 0 :(得分:0)

真的关闭。

您只是在FOR语句中缺少分隔符(如果省略delims参数,它将使用空格作为默认值)以使用下划线分隔名称。然后你需要重新组装"通过组合标记将文件名返回到MOVE语句中。

@ECHO OFF
SETLOCAL
SET "sourcedir=c:\sourcedir"
PUSHD %sourcedir%

REM Use the underscore _ as a delimiter.
FOR /f "tokens=1,* delims=_" %%a IN ('dir /b /a-d "*_*_*_*_*_*_*_*.avi"') DO (
    REM Name the folder based on what is before the first token.
    MD %%a
    REM To get the full filename, concatenate the tokens back together.
    MOVE "%%a_%%b" .\%%a\
)
POPD
GOTO :EOF