2016-04-20 35 views
0

文字列の接頭辞を付けることによって、フォルダ内のファイル名の名前を段階的に変更したいと思います。私はこの文字列の前に付けるだけのWindows PowerShellスクリプトを見つけました:ファイル名のインクリメンタルな名前の変更

cd C:\Users\strz\Desktop\Data_zMob\processed_\PROD_3Euro_OK\Z_586_20160307_0850 
$files=get-childitem 
foreach ($file in $files) { 
Rename-Item $file.name ("stringToAppend" + $file.name) 
} 

私はこのスクリプト言語に全く慣れていません。だから私はこれを試した:

cd C:\Users\strz\Desktop\Data_zMob\processed_\PROD_3Euro_OK\Z_586_20160307_0850 
    $files=get-childitem 
    $lotId=1 
    foreach ($file in $files) { 
    Rename-Item $file.name ($lotId + $file.name) 
    $lotId++ 
    } 

それはもちろん、失敗しました。どうすればこれを達成できますか?

+1

エラーを含めるか、エラーがどのように発生したかを伝えます。 –

答えて

2
Cannot convert value "data.csv" to type "System.Int32". Error: "Input string was not in a correct format." 
At line:5 char:1 
+ Rename-Item $file.name ($lotId + $file.name) 
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    + CategoryInfo   : InvalidArgument: (:) [], RuntimeException 
    + FullyQualifiedErrorId : InvalidCastFromStringToInteger

あなたが最も可能性が高いなっていたエラーが原因でこのラインの

Rename-Item $file.name ($lotId + $file.name) 

$lotidたISは整数であり、あなたは、ファイル名は不可能である文字列で数学演算を実行しようとしていましたコンシーレンされています。 最も簡単なことこの作業を行うには、変数を引用符で囲んで、名前変更中に文字列としてのみ扱うようにします。

Rename-Item $file.name ("$lotId" + $file.name) 

あなたが知っているので、あなたが私に取り組んでいるパスが離れて働いてパスされ、電流経路に依存するから、恥ずかしがり屋です。このようなものは、あなたが望むことをするでしょう。テストが完了したら-WhatIfを削除してください。

$lotId = 1 
$path = "D:\Temp\New folder" 
Get-ChildItem $path | Foreach-object{ 
    Rename-Item -Path $_.FullName -NewName ("{0}{1}" -f $lotId++,$_.Name) -WhatIf 
} 

それを高めるために別の行の必要がないように、我々は各ループパス時の$lotId++を更新します。確かに動作する他のスニペットがあります。これは私が最初にしたことで、何もしなかったのです。

関連する問題