2016-04-27 37 views
0

PowerShell 3.0を使用して多数のファイル名から空白を削除しようとしています。例えばファイル名から空白を削除するには

$Files = Get-ChildItem -Path "C:\PowershellTests\With_Space" 
Copy-Item $Files.FullName -Destination C:\PowershellTests\Without_Space 
Set-Location -Path C:\PowershellTests\Without_Space 
Get-ChildItem *.txt | Rename-Item -NewName { $_.Name -replace ' ','' } 

:ここに私が働いているコードがあるWith_Spaceディレクトリには、これらのファイルがあります。

Cable Report 3413109.pdf 
Control List 3.txt 
Test Result Phase 2.doc

Without_Spaceディレクトリがあることを上記のファイル名が必要になります。

CableReport3413109.pdf 
ControlList3.txt 
TestResultPhase 2.doc

現在のところ、このスクリプトではエラーは表示されませんが、ソースファイルはコピー先のフォルダにのみコピーされますが、ファイル名のスペースは削除されません。このような

+0

あなたの質問に答えを編集しないでください。代わりにあなたの問題を解決するのに最も役立つと考えられる答えを、[受け入れる](http://meta.stackoverflow.com/a/5235) –

答えて

7

あなたのコードはうまく動作するはずですが、Get-ChildItem *.txtリストだけなので.txtのは、最後の文はあなたにこのような結果を与える、単なるテキストファイルからスペースを削除する必要がありますファイル:

ケーブルレポート3413109.pdfを
ControlList3.txtこれは、フォルダ内のすべてのファイルの名前からスペースを削除する必要があり


テスト結果の位相2.doc:

Get-ChildItem -File | Rename-Item -NewName { $_.Name -replace ' ','' } 

PowerShellの前処理は、単にファイルへ制限するためにこれを使用v3は:

Get-ChildItem | Where-Object { -not $_.PSIsContainer } | 
    Rename-Item -NewName { $_.Name -replace ' ','' } 
+0

ありがとうAnsgar、それは働いた!私はあなたの助けに感謝します。 – Sohel

2

何かが、私はあなたのスクリプトはほとんど$_が何かのように定義されようとしていないことを除いて、動作するはずだと思う

$source = 'C:\temp\new' 
$dest = 'C:\temp\new1' 
Get-ChildItem $source | % {copy $_.FullName $(join-path $dest ($_.name -replace ' '))} 
+0

おかげでアンソニー。あなたが書いたコードをチェックします。私はあなたの助けに感謝します。 – Sohel

3

を仕事ができます。 for-eachコマンドレット(%)を使用すると、それを割り当てて使用できます。

Get-ChildItem *.txt | %{Rename-Item -NewName ($_.Name -replace ' ','')} 

EDIT: という解釈は完全に間違っていました。何人かの人が便利だと思ったようですが、パイプがあるとすぐに$_がパイプ内のオブジェクトを参照しているようです。私の悪い。

+0

現在のオブジェクト変数( '$ _')は与えられたコンテキストでうまく動作します。 'ForEach-Object'ループで' Rename-Item'を実行する必要はありません。 –

+0

ありがとう@AnsgarWiechers!私は何が起こっていたのかを見るために、Rename-Itemをエコーで置き換えようとしました。そして、そこから偽の結論が進んでいました。 –

+0

JaredとAnsgarに感謝しました。私はあなたの助けに感謝します。 – Sohel

関連する問題