基于批处理的文件/文件夹创建

时间:2012-01-16 12:48:47

标签: file batch-file directory filenames creation

我在不同的流派文件夹中有很多电影。我想通过批处理文件做的是为电影所在的同一类型文件夹中的每部电影创建一个文件夹。例如:

/Movies/SciFi/
/Movies/SciFi/the matrix.avi
/Movies/SciFi/the matrix reloaded.mkv
/Movies/Comedy/
/Movies/Comedy/borat.avi
/Movies/Comedy/dinner for schmucks.avi

基本上我想从父文件夹中运行批处理文件,扫描流派文件夹中的所有* .mkv * .avi * .mp4文件,并根据电影名称创建文件夹。文件夹的名称应为:

.(moviename without extension).backdrop

当然,如果该文件夹已存在,则不应创建该文件夹。这就是我到目前为止所做的:

for /f %%f in ('dir *.avi *.mkv *.mp4 /b') do md .%%~nf.backdrop

这有一些缺点:我必须在每个流派文件夹中运行它,如果文件名中有空格,这个命令只会捕获所有内容直到空格,使aboce命令几乎无用。

希望你们能帮助我。

2 个答案:

答案 0 :(得分:1)

行情将处理空格;

@echo off
for /r "c:\movies\" %%d in (.) do (
    pushd %%d
    echo now in %%d
    for %%f in (*.avi *.mkv *.mp4) do (
        md "%%~nf.backdrop"
    )
    popd 
)

这应该在SOMEMOVIE.backdrop目录中创建Category\SOMEMOVE\

如果您希望它们只在md "..\%%~nf.backdrop"

根目录中

(这假设电影目录中没有其他子目录作为递归,因此会包含它们)

答案 1 :(得分:1)

如果您不想走层次结构,则不需要/ r选项。此外,简单的if语句可以避免尝试创建现有的文件夹

for /D %%D in (\Movies\*) do for %%F in ("%%~D\*.avi" "%%~D\*.mkv" "%%~D\*.mp4") do (
  if not exist "%%~D\%%~nF.backdrop" md "%%~D\%%~nF.backdrop"
)