4

フォルダー内のすべての MP3 ファイル名の最初の 20 文字を削除するスクリプトを powershell で作成しようとしています。ファイル 'test.ps' を作成し、以下の powershell コードを挿入しました。

gci *.mp3 | rename-item -newname { [string]($_.name).substring(20) }

このファイルを powershell.exe で実行しても何も起こりません。

誰でも助けることができますか?ありがとう。

4

4 に答える 4

6

これで始められるかもしれません。(おそらくもっと簡潔な方法がありますが、これは機能し、後で維持する必要があるときに読みやすくなります。:-))

フォルダーを作成しC:\TempFiles、そのフォルダーに次のファイルを作成しました。

TestFile1.txt
TestFile2.txt
TestFile3.txt
TestFile4.txt

(昔ながらの方法で作成しました。 <g>.

for /l %i in (1,1,4) do echo "Testing" > TestFile%i.txt

実際のコマンド プロンプトから)。

次にPowerShell ISE、スタート メニューから開き、このスクリプトを実行しました。$filesファイルの名前のみを含む配列 ( ) を作成し、それぞれを処理します。

cd \TempFiles
$files = gci -name *.txt
foreach ($file in $files) {
  $thename = $file.substring(4);
  rename-item -path c:\TempFiles\$file -newname $thename
}

これにより、以下を含むフォルダーが残りました。

File1.Txt
File2.Txt
File3.Txt
File4.Txt
File5.Txt

コマンド ラインからスクリプトを実行するには、デフォルトの Windows セキュリティ設定を変更する必要があります。PowerShell ISEのヘルプ ファイルを (メニューから) 使用して検索するか、プロンプトからabout_scripts実行することで、それらについて調べることができます。ヘルプ ファイルのサブセクションを参照してください(はるかに読みやすいです)。help about_scriptsISEHow To Run A Script

于 2012-05-25T23:43:05.470 に答える
2

あなたのコードは実際に動作します。2つのこと...

  1. ファイルの名前を に変更しますtest.ps1
  2. MP3 ファイルがあるフォルダーで実行します。パスを指定していないためGet-ChildItem、現在のディレクトリで実行されます。

このようなmp3ファイルをたくさん作ってあなたのラインをテストしました -

1..30 | % { new-item -itemtype file -Name (
    $_.ToString().PadLeft(30, 'A') + ".mp3" )}
于 2012-05-25T23:48:11.250 に答える
0

より「安全な」方法を使用します(ファイル名が問題の長さよりも短い場合、エラーが発生します。ファイル拡張子も合計文字数の一部としてターゲットにしています)。各ファイルのベース名が 21 文字を超えているかどうかを確認します (最初の 20 文字を削除しても、1 文字の長さの名前のままである可​​能性があります)。最初の 20 個を削除した後にディレクトリに同じ名前のファイルが含まれていると、失敗する可能性があります。自分でさらに開発することができます)。

gci *.mp3 | foreach{

    if($_.BaseName.Length -ge 21)
    {
        $ext = $_.Extension
        $BaseName = $_.BaseName.Substring(20)
        Rename-Item $_ -NewName "$BaseName$ext"
    }
}
于 2012-05-26T08:48:35.257 に答える