【问题标题】:batch file to create directory based on file name, move like files to new directory批处理文件根据文件名创建目录,将类似文件移动到新目录
【发布时间】:2023-10-02 17:44:02
【问题描述】:

我在一个目录中有数百个文件,它们都有不同的名称,但其中一些是相关的。

文件大多是.AI和PDF,都是这样的名字:

  • FILE1_retail_xxx.ai
  • FILE1_label_xxx.ai
  • FILE2_retail_xxx.ai
  • FILE2_label_xxx.ai
  • FILE3_retail_xxx.ai
  • FILE3_label_xxx.ai

我想要做的是有一个批处理文件为 FILE1、FILE2、FILE3 等创建目录,并将所有以 FILE1、FILE2、FILE3 等开头的文件移动到这些新创建的目录中。

我用过这个,但它只是为整个文件名创建了一个 DIR。

@echo off
for %%i in (*) do (
 if not "%%~ni" == "organize" (
  md "%%~ni" && move "%%~i" "%%~ni"
 )
)

这不能满足我的需要,谁能帮我把它按摩成我需要的东西或者给我一个新的批处理文件来试试?

谢谢!这将为我节省无数小时的体力劳动!

【问题讨论】:

  • 完全按照您的问题进行操作,@For %%# In (1 2 3)Do @"%__AppDir__%Robocopy.exe" . FILE%%# FILE%%#_* /Mov>NUL。但是,我确信基于此您将修改或更好地澄清您的问题。
  • 要按照我认为你想要的方式执行任务,@For %%I In (*)Do @If /I Not "%%I"=="%~nx0" For /F "EOL=_Delims=_" %%# In ("%%~nxI")Do @"%__AppDir__%Robocopy.exe" . "%%#" "%%I" /XF *organize* /Mov>NUL,应该会让你更接近。这个单行批处理文件适用于当前目录中的所有文件,而不仅仅是包含下划线的文件。如果它对您的特定任务很重要,那么这应该足够简单。

标签: windows batch-file cmd


【解决方案1】:

您需要用_ 和另一个for /f 循环分割文件名:

@echo off
for %%i in (*) do (
  if not "%%~ni" == "organize" ( 
    for /f "delims=_" %%a in ("%%~ni") do (
      md "%%a" 2>nul 
      move "%%~i" "%%~a\" 
  )
)

2>nul 在文件夹已存在的情况下抑制错误消息。

请考虑使用for %%i in (*_*) do (for %%i in (*_*_*.ai *_*_*.pdf) do ( - 根据您的实际需要/文件名预先选择要移动的文件。

【讨论】: