【问题标题】:Batch based file/folder creation基于批处理的文件/文件夹创建
【发布时间】:2012-02-11 09:48:54
【问题描述】:

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

/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 命令几乎无用。

希望你们能帮帮我。

【问题讨论】:

    标签: file batch-file directory filenames creation


    【解决方案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"
    )
    

    【讨论】:

      【解决方案2】:

      引号将处理空格;

      @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\ 目录中创建SOMEMOVIE.backdrop

      如果您希望它们位于根目录中,只需 md "..\%%~nf.backdrop"

      (假设电影目录中没有其他子目录,因为它是递归的,所以会包含它们)

      【讨论】:

      • 但是一旦运行了这个脚本,会有额外的子目录。这意味着该解决方案只能使用一次,因此 FOR /R 不是一个好的选择。如果目录已经存在,也会给出错误信息。
      • 然后你可以使用for /d %%d in ("c:\movies\*") do (...,你可以使用if existss64.com/nt/if.html检查文件夹是否存在
      猜你喜欢
      • 1970-01-01
      • 2011-04-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-22
      • 1970-01-01
      • 2023-03-20
      • 2013-02-13
      相关资源
      最近更新 更多