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

File 基于批处理的文件/文件夹创建,file,batch-file,directory,filenames,creation,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 基本上,我想从父文件夹Movies运行批处理文件,扫描流

我有很多不同类型的电影文件夹。我想通过批处理文件为每部电影创建一个文件夹,该文件夹与电影所在的类型文件夹相同。例如:

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

.(moviename without extension).backdrop
当然,如果文件夹已经存在,就不应该创建它。这就是我到目前为止所做的:

for /f %%f in ('dir *.avi *.mkv *.mp4 /b') do md .%%~nf.backdrop
但这也有一些缺点:我必须在每个流派文件夹中运行它,如果文件名中有一个空格,这个命令只会在空格前捕获所有内容,这使得aboce命令几乎毫无用处


希望你们能帮助我。

引号将处理空格

@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 
)
这应该在
Category\SOMEMOVE\
dir中创建
SOMEMOVIE.background

如果你想把它们放在根目录中,只要
md.\%%~nf.background“


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

如果不想遍历层次结构,则无需使用/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"
)

但是一旦这个脚本被运行,就会有额外的子目录。这意味着此解决方案只能使用一次,因此FOR/R不是一个好的选择。如果目录已经存在,也会给出错误消息。然后你可以使用
来代替(…
)中的/d%%d(“c:\movies\*”)来检查文件夹是否存在