4

これが PowerShell で行うのが最適かどうかはわかりませんが、基本的に、名前が間違っている映画がたくさんあります。ただし、各ムービーのフォルダ名は正しいです。

フォルダー内で、各フォルダーを調べて、.mp4 ファイルの名前をフォルダーと同じ名前に変更したいと考えています。

各フォルダには .mp4 ファイルと .jpg ファイルしかありませんが、.mp4 ファイルだけの名前を変更したいと思います (両方の名前を変更することも実際には悪くありません)。

PowerShell でこれを行う簡単な方法はありますか?

4

3 に答える 3

2

読み取り可能なバージョン:

Get-ChildItem -Attributes Directory D:\Videos | ForEach-Object {
    Get-ChildItem -Path $_ *.mp4 | Rename-Item -NewName "$_.mp4"
}

1 つ目は、次のブロックのように、Get-ChildItem内部のすべてのディレクトリ オブジェクトを取得し、それらの各ディレクトリD:\VideosForEach-Object反復処理し$_ます。

ブロック内では、オプションを介して指定されたディレクトリからファイルGet-ChildItemを取得するために再度使用されます。最後に、現在のディレクトリから移動せずにビデオ ファイルの名前を変更するために使用されます。mp4-PathRename-Item

于 2013-06-18T22:15:30.907 に答える
2

このようなものが動作するはずです:

# run from your D:\Movies (or whatever) folder

# Go through all subfolders of the folder we're currently in, and find all of the .MP4 
# files.  For each .MP4 file we find...
ls -Recurse -Filter *.mp4 | %{ 
    # Get the full path to the MP4 file; use it to find the name of the parent folder.
    # $_ represents the .MP4 file that we're currently working on.
    # Split-Path with the -Parent switch will give us the full path to the parent 
    # folder.  Cast that path to a System.IO.DirectoryInfo object, and get the 
    # Name property, which is just the name of the folder.  
    # There are other (maybe better) ways to do this, this is just the way I chose.
    $name = ([IO.DirectoryInfo](Split-Path $_.FullName -Parent)).Name

    # Tell the user what we're doing...
    Write-Host "Renaming $_ to $($name).mp4..."

    # Rename the file.
    # We have to provide the full path to the file we're renaming, so we use
    # $_.FullName to get it.  The new name of the file is the same as that of the
    # parent folder, which we stored in $name.
    # We also remember to add the .MP4 file extension back to the name.
    Rename-Item -Path $_.FullName -NewName "$($name).mp4"
}
于 2013-06-18T21:47:01.893 に答える
2

クロス バージョンの例を次に示します。

Get-ChildItem D:\temp\*\*.mp4 | Rename-Item -NewName {$_.Directory.Name +'.mp4'}
于 2013-06-19T06:51:14.433 に答える