存储在单个目录文件夹中的文件

存储在单个目录文件夹中的文件

我对批处理文件不太熟悉,所以非常感谢您的帮助。我在一个目录中存储了大量文件,我希望根据文件名中的第一个单词将它们分类到子文件夹中。因此,我有如下文件:

C:\Folder\ABC_001
C:\Folder\BCD_001
C:\Folder\CDF_002
C:\Folder\DFE_003

我希望根据第一个单词将所有文件移动到子文件夹中,最终如下所示:

C:\Folder\001\ABC_001
C:\Folder\001\BCD_001
C:\Folder\002\CDF_002
C:\Folder\003\DFE_003

这是我的代码,但它不起作用

@Echo off
PushD C:\folder
for %%A in ("*_*.*") do for /f "tokens=1* delims=-" %%B in ("%%A") do (
     If not exist "%%B" MD "%%B"
     Move "%%A" "%%B\"
)
PopD

答案1

我希望根据文件名中的第一个单词将文件排序到子文件夹中

for %%A in ("*_*.*") do for /f "tokens=1* delims=-" %%B in ("%%A") do (

上面的内容被破坏了,因为您将其-作为了分隔符,而实际上应该是_

Move "%%A" "%%B\"

上面的内容已损坏,因为与%%A您的文件不匹配。应该是"%%A_%%B"

使用以下批处理文件(test.cmd):

@echo off
setlocal
PushD folder
for /f "tokens=1* delims=_" %%A in ('dir /b *_*.*') do (
  If not exist "%%B" MD "%%B"
  Move "%%A_%%B" "%%B\"
  )
PopD
endlocal

例子:

F:\test>dir /b /s folder
F:\test\folder\ABC_001
F:\test\folder\BCD_001
F:\test\folder\CDF_002
F:\test\folder\DFE_003

F:\test>test
        1 file(s) moved.
        1 file(s) moved.
        1 file(s) moved.
        1 file(s) moved.

F:\test>dir /b /s folder
F:\test\folder\001
F:\test\folder\002
F:\test\folder\003
F:\test\folder\001\ABC_001
F:\test\folder\001\BCD_001
F:\test\folder\002\CDF_002
F:\test\folder\003\DFE_003

F:\test>

进一步阅读

答案2

如果您不了解批处理脚本,并且雇主不要求您了解,那么最好学习和使用 PowerShell。虽然一开始它似乎“比较冗长”,但这是一件好事 --- 当您六个月后查看代码时,却记不起您做了什么。:D

代码如下:

Get-ChildItem -file -path 'c:\Folder' |
   ForEach-Object{
      $newDir = ($_.BaseName -split '_')[-1]
      $NewDir = Join-Path $_.Directory $newDir
      If (!( Test-Path $NewDir )) {
         New-Item -Itemtype Directory -Path $newDir
      }
      Move-Item $_ $NewDir   
}

相关内容