2017-05-04 7 views
1

私はちょうどpowershellで遊んでいたので、初心者の間違いを執筆しました。 私はファイルのためにを検索しています。ファイルのパスを変数に格納しています。そのパスに特定のファイルがあるかどうかを確認してから、を削除してください。を削除してください。私はこのことについて多くの助けを見つけることができない、私はif文に問題があると思うが、私はそれを理解できない。ここで if文 - パスにファイルが含まれているかどうかをチェックする方法

はコードです:

$startDirectory = ".\somepath\" 
$FindFileXml = Get-Childitem $startDirectory 

$StorePaths = Get-Childitem $FindFileXml -include "file.xml" -recurse 
if($StorePaths -eq "somefile.cs" -and "diffrentfile.cs") 
{ 
    Remove-Item "somefile.cs" 
    Remove-Item "diffrentfile.cs" 
} 
else{ 
Write-host "file not found!" 
} 

UPDATE:

$StorePaths = Get-Childitem $FindFilterXml-Filter "file.xml" -recurse 

$StorePaths | Select-Object -ExpandProperty Directory 
| Get-ChildItem | 

Where-Object {($_.Name -eq 'GeneratedCode.cs') -or ($_.Name -eq 'TypedEnums.cs')} 

| Remove-Item 

このストア$ StorePathsでFile.xmlのパスがだろうか?もしそうなら、どのように私はそれをコピーすることができますコピーアイテム$ StorePath.name。\ somepath?

+1

はい、これは$ storePathsにfile.xmlのパスを保存します。コピーするには、copy-itemコマンドレットeにパイプしてコピーします。 g。 : '$ StorePaths |コピーアイテム - デスティネーション 'your_path'' –

答えて

4

お客様にはif文が必要です。更新

$StorePaths | 
    Where-Object {($_.Name -eq 'somefile.cs') -or ($_.Name -eq 'diffrentfile.cs')} | 
    Remove-Item 

この例では、唯一のfile.xmlディレクトリ内のファイルを削除しますちょうどあなたがRemove-Itemコマンドレットにそれらを削除し、パイプしたいファイルのためのあなたの結果をフィルタリング存在する:

Get-Childitem $FindFileXml -Filter "file.xml" -recurse | 
    Select-Object -ExpandProperty Directory | 
    Get-ChildItem | 
    Where-Object {($_.Name -eq 'somefile.cs') -or ($_.Name -eq 'diffrentfile.cs')} | 
    Remove-Item 
+0

あなたのコードを試しましたが、ファイルは削除されていません。 'file.xml'はいつも' somefile.cs'と 'diffrentfile.cs'のフォルダにあり、何が問題なのでしょうか? –

+0

ああ、ちょうどあなたが '-include'パラメータを使うのを見ただけです。それを省略できますか? –

+0

ええと、ファイルfile.xmlの場所が違うので、最初にfile.xmlのパスを見つけなければなりません。 '-include'パラメータを使う以外の解決方法がありますか? –

関連する問題