ファイルを一括で名前変更し、サブフォルダ(作成する必要があります)に移動する

ファイルを一括で名前変更し、サブフォルダ(作成する必要があります)に移動する

「10389-2001.pdf」という形式のファイルでいっぱいのフォルダがあります。つまり、最初に 5 桁の数字、ハイフン、次に 4 桁の数字です。ファイル自体の名前だけを「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

ソース フォルダと宛先フォルダを調整します。最後に "\" を忘れないでください。宛先フォルダが存在する必要があります。手抜きコードです。sourceFolder には ?????-??????? ファイルのみが含まれます。

関連情報