【问题标题】:How to create folders based on file names and then move them to the folders如何根据文件名创建文件夹,然后将它们移动到文件夹中
【发布时间】:2018-01-22 04:16:16
【问题描述】:

我希望批量根据 zip 文件自动创建文件夹。

这些 zip 文件有不同的名称,我想自动创建与这些文件同名的文件夹并将它们全部移到那里。

例子:

我有这些文件:

[Jungle] part 1.zip
[Jungle] part 2.zip
[Jungle] part 3.zip
[People] Of babies.zip
[People] Of people.zip
[Animals] From the sea.zip
[Animals] Furry.zip
  • 所有包含“[Jungle]”的文件都会创建一个名为“Jungle”的文件夹 他们被移到那里。

  • 所有包含“[People]”的文件都会创建一个名为“People”的文件夹,并且 被移到那里。

【问题讨论】:

    标签: batch-file copy directory move


    【解决方案1】:

    基于[folder] etc.zip的模式。

    @echo off
    setlocal
    
    for %%A in ("[*]*.zip") do call :movefile "%%~A"
    goto :eof
    
    :movefile
    setlocal
    for /f "delims=]" %%A in ("%~1") do (set "folder=%%~A") & goto :next
    :next
    set "folder=%folder:~1%"
    if not exist "%folder%" md "%folder%"
    move "%~1" "%folder%"
    goto :eof
    

    for 循环搜索匹配[*]*.zip 模式的文件 并在找到的每个文件上调用:movefile 标签。文件名 作为参数传递给%1 的第一个参数。 %~1 去除外部引号,以便可以将其放置在新的外部引号中。 :movefile 标签中的for 循环将"%~1" 字符串由 字符]。变量folder 将被设置为第一个令牌。 goto :next 确保只完成一个循环。 %folder:~1%%folder% 的值,没有[ 的第一个字符。 如果该文件夹不存在,则创建该文件夹,然后将该文件移动到该文件夹​​中。

    【讨论】:

    • 为什么不只是"delims=[]"?将消除对变量的需要(以及延迟扩展的需要)
    • @Stephan,我选择在] 上定界并删除第一个字符,因此代码仅在字符串的开头运行。如果第一个for 循环改变了模式,则[] 上的定界可以不在字符串的开头定界。我想避免在需要延迟扩展的第二个for 循环中工作,因此变量folder 通知问卷它是实际的文件夹名称。下次我可能会选择不同的方式。
    最近更新 更多