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

Batch: create a folder based on part of filename and then copy the file into it

我有一个包含一堆 .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

真的接近。

您只是在 FOR 语句中缺少一个分隔符(如果您省略 delims 参数,它将使用 space 作为默认值)将名称分开下划线。然后,您需要通过组合标记 "reassemble" 将文件名返回到 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