批次重命名檔案並移動到子資料夾(必須建立)

批次重命名檔案並移動到子資料夾(必須建立)

我有一個充滿“10389-2001.pdf”格式文件的資料夾,因此首先是一個五位數字,一個連字符,然後是一個四位數字。我想重命名所有文件,以便文件本身僅被稱為“2001.pdf”,但它被移動到新的子資料夾“10389”中。由於該子資料夾尚不存在,因此需要建立它。

我願意接受有關如何在 Windows 命令列、Powershell 或 Cygwin 上執行此操作的建議。

答案1

PowerShell 腳本:

Get-ChildItem *-*.pdf|Foreach-object {
    $Dir, $File = $_.Name.Split('-')[0,1]
    if (!(Test-Path $Dir)){MD $Dir}
    $_| Move -Destination ("$Dir\$File") 
}

批次:

@echo off
for /F "Tokens=1* delims=-" %%A in ('Dir /B "*-*.pdf"') do (
    If not exist ".\%%A" MD ".\%%A"
    Move "%%A-%%B" "%%A\%%B"
)

之前的樹:

> tree /f .
Z:\
    10389-2001.pdf
    10815-2017.pdf

之後的樹:

> tree /f .
Z:\
├───10389
│       2001.pdf
└───10815
        2017.pdf

答案2

使用 VBS 即可輕鬆實現。將程式碼複製到擴展名為“.vbs”的檔案中

on Error Resume Next   
sFolder = "D:\test\"
dFolder = "D:\test1\"
Set oFSO = CreateObject("Scripting.FileSystemObject")

For Each oFile In oFSO.GetFolder(sFolder).Files
    NameParts = split(oFile.Name,"-")
    Set f = oFSO.CreateFolder(dFolder & NameParts(0))
    set fi = oFSO.GetFile(oFile)
    fi.Copy dFolder & NameParts(0) & "\" & NameParts(1)
Next

調整來源資料夾和目標資料夾。不要忘記最後的“\”。目標資料夾必須存在。快速而骯髒的編碼。僅有的 ?來源資料夾中的檔案。

相關內容