0

ディレクトリ内のすべてのファイルに対して検索と置換を実行しようとしています。Windows 7 Enterprise を実行していますが、検索対象のフォルダーはローカル コンピューターにあります。フォルダー内の 5 つの .SQL ファイルに対してのみステートメントを実行すると、スクリプトは正常に実行されます。最初のフォルダー内に別のフォルダーを追加すると (現在、5 つの .sql と 1 つのフォルダーがあり、まだ何も含まれていません)、同じステートメントを実行しようとすると、新しいフォルダーへのアクセスが拒否されたというエラーが表示されます。フォルダー、ファイル、およびその子フォルダーへのアクセスを妨げる可能性があると考えられるその他すべてにアクセス許可を設定して、すべてを試しました。どんなアドバイスでも大歓迎です。Windowsのフォルダーで属性が正しく設定されていることを確認することさえ試みました。

これは私が使用しているスクリプトで、すべてのファイルがフォルダーのルートにある場合に機能しますが、子フォルダーにあるものはすべてエラーをスローします。

(get-Content D:\project\*) | Foreach-Object {$_ -replace ";", ""} | Set-Content D:\project\*
4

2 に答える 2

0

このコードで私がやろうとしていたことを達成することができました。ご意見ありがとうございます。これにより、SQL 拡張子を持つすべてのファイルを変更するオプションが与えられます。

Get-ChildItem D:\Projects *.SQL -recurse |
Foreach-Object {
    $c = ($_ | Get-Content) 
    $c = $c -replace ";", ""
    [IO.File]::WriteAllText($_.FullName, ($c -join "`r`n"))
}
于 2013-11-14T13:36:34.100 に答える
0

むしろ、次のようにします。

$folder = 'D:\project'
foreach ($f in (Get-ChildItem $folder -Recurse | ? {-not $_.PSIsContainer})) {
  (Get-Content $f.FullName) -replace ';' | Set-Content $f.FullName
}

パイプラインの最初と最後の両方でワイルドカードを使用するのは、たとえうまくいくとしても (うまくいきません)、快適ではありません。

于 2013-11-13T21:16:53.800 に答える