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

问题描述:

我有很多电影在不同的流派文件夹。我想通过批处理文件执行的操作是为电影所在的同一流派文件夹中的每个电影创建一个文件夹。例如:基于批处理的文件/文件夹创建

/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 

Ofcourse如果文件夹已存在,则不应创建文件夹。这是我到目前为止有:

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

这有一些缺点,但我必须从每个流派文件夹中运行它,如果文件名中有一个空格,该命令将只赶上了一切直到空间,渲染aboce命令几乎没用。

希望你们能帮助我。

无需如果/ 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" 
) 

行情将处理的空间;

@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.backdrop

如果你希望他们在根刚刚md "..\%%~nf.backdrop"

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

+0

但*会*有额外的子目录,一旦该脚本已运行。这意味着这个解决方案只能使用一次,所以FOR/R不是一个好选择。如果目录已经存在,也会给出错误信息。 – dbenham 2012-01-16 13:48:40

+0

然后,您可以在(“c:\ movies \ *”)中使用'for/d %% d(do ... ...),而您可以使用'if exists'检查文件夹是否存在http://ss64.com/ NT/if.html – 2012-01-16 13:54:09