0

我正在尝试对目录中的所有文件运行查找和替换。我正在运行 Windows 7 Enterprise,并且正在搜索的文件夹位于本地计算机上。每当我只对文件夹中的 5 个 .SQL 文件运行语句时,脚本运行良好。当我在第一个文件夹中添加另一个文件夹(所以现在有 5 个 .sql 和一个文件夹中还没有任何内容)并尝试运行相同的语句时,我收到一个错误,拒绝访问新文件夹。我已经尝试了所有设置权限的方法,包括对文件夹、文件和我能想到的一切可能会阻止它访问该子文件夹的权限。任何建议将不胜感激。我什至尝试确保在 Windows 中的文件夹上正确设置了属性。

这是我正在使用的脚本,当所有文件都在文件夹的根目录中时,它可以工作,但子文件夹中的任何内容都会引发错误。

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

2 回答 2

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 回答
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 回答