txtファイルと同じ名前を共有するPDFファイルへの参照を含むtxtファイルがたくさんあります。
問題は、これらのファイルのファイル名が長すぎることです。これらのtxtファイルとpdfファイルは自動生成され、受信する前にファイル名の長さを変更する方法がありません。
だから私がしなければならないのは、すべてのファイルを開き、そのファイル名に基づいてファイル内のファイル名を見つけ、ファイル名を最大16文字+拡張子(合計20文字)の名前に変更してから、新しいテキストファイルを出力することですファイル名を変更し、対応するPDFの名前を新しいファイル名に変更します。
私はPowershellを初めて使用し、約2日間グーグルした後、次のようなものを見つけました。
$files = Get-ChildItem "C:\Test\Done" -recurse -include *.txt
foreach ($file in $files){
$outputfile = (Get-Date).hour + (Get-Date).minute + (Get-Date).millisecond + ".txt"
Get-Content $file | Foreach-object {$_ -replace '$file', '$outputfile' ` }
Set-Content $outputfile }
しかし、私は自分が本当に求めているものとはかけ離れていると感じています。
このスクリプトに私が望むことをさせる方法を誰かが知っていますか?
クリストファー
編集:
@Christianのソリューションを試しましたが、機能しているように見えましたが、ファイル内に新しいファイル名を編集および追加しませんでした。
私はこれをテストとして試しました:
$files = "testfil2.txt"
$output = "testfil3.txt"
(Get-Content "C:\test\done\1456390000.txt") | ForEach-Object {$_ -replace $files, $output } | Set-Content "C:\test\done\1456390000.txt"
ForEach-Objectの変数から''を削除しましたが、意図したとおりに機能し、変数$ filesを見つけて、$outputで変更します。ただし、@ Christianのスクリプトで同じことを行うと、エラーメッセージが表示されます。
Regular expression pattern is not valid: C:\Test\Done\1542644000.txt.
At line:7 char:39
+ (Get-Content $file) | Foreach-object {$_ -replace $file, $outputfile } | Set-Co ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (C:\Test\Done\1542644000.txt:PSObject) [], RuntimeException
+ FullyQualifiedErrorId : InvalidRegularExpression
何か案は?
以下のクリスチャンが答えました。