批量重命名文件并移动到子文件夹(必须创建)

批量重命名文件并移动到子文件夹(必须创建)

我有一个文件夹,里面全是“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

调整源文件夹和目标文件夹。不要忘记末尾的“\”。目标文件夹必须存在。快速编码。源文件夹中只有 ?????-????? 文件。

相关内容