1

ファイル名の一部を名前変更または削除しようとしています。更新されたファイルをあるサーバーから別のサーバーに移動するスケジュールされたジョブがあります。ファイルを移動したら、名前を変更する必要があります。例: Filename_01-23-AB.exeto Filename.exe「_」から「.」までのすべてを削除したい 拡張子はそのままにしておきます。これを行う必要がある次のコードを見つけましたが、動作させることができないようです。私はここで正しい道を進んでいますか?

## Removes the build number from the filename of "Filename_XX-XX-XX.exe" leaving the new filename to be "Filename.exe" ##

$File = -Path "C:\Temp\TestPath\"

foreach ($File in gci *.exe) {
    $Fname = ($File.name).split('.')[0]  ## item before the '.' ##
    $Prefix = $Fname.split('_')[0] ## item before the '_' ##
    $Newname = $Prefix + '.exe'
    Rename-Item $file $Newname 
}
4

3 に答える 3

1

私はあなたがやろうとしていることを単純化しようとしました:

pushd "C:\Temp\TestPath\"
dir | ? { $_.Name -like "*.exe" } | 
% { Rename-Item $_ "$($_.BaseName.split('_')[0])$($_.Extension)" }
popd

まず、これにより、PowerShell が参照するディレクトリが、定義済みのディレクトリ ( pushd) に変更されます。次に、ディレクトリの内容を取得し、拡張子が .exe のすべてのオブジェクトを検索し、ファイルのベース名をアンダースコアで分割します。popd次に、ディレクトリを、このスクリプトを実行する前の場所に戻します。

于 2016-05-20T16:13:51.340 に答える
0

!未検証

これを試して

$path = 'C:\Temp\TestPath\'

gci $path *.exe | ? basename -match '_' | % {
    # if the file.txt already exists, rename it to file-1.txt and so on
    $num = 1
    $base = $_.basename.substring(0, $_.basename.indexof('_'))
    $ext = $_.extension
    $dir = $_.directory
    $newname = Join-Path $dir "$base$ext"
    while (Test-Path $newname) {
        $newname = Join-Path $dir "$base-$num$ext"
        $num++
    }

    # finally, rename the file
    ren $_.fullname $newname
}
于 2016-05-20T16:03:22.143 に答える