我试图遍历所有文件,无论类型如何,都位于文件夹中,并用用户输入的字符串更改字符串。
我现在可以使用以下代码执行此操作,但只能使用一种文件扩展名。
这是我的代码:
$NewString = Read-Host -Prompt 'Input New Name Please'
$scriptPath = split-path -parent $MyInvocation.MyCommand.Definition
$InputFiles = Get-Item "$scriptPath\*.md"
$OldString = 'SolutionName'
$InputFiles | ForEach {
(Get-Content -Path $_.FullName).Replace($OldString,$NewString) | Set-Content -Path $_.FullName
}
echo 'Complete'
无论扩展名如何,我如何循环浏览文件?因此,无论是md,txt还是cshtml或其他名称,它都会按照说明替换字符串。
要获取文件夹中的所有文件,可以使用Get-ChildItem
。添加该-Recurse
开关,以便也将文件包含在子文件夹中。
例如,您可以像这样重写脚本
$path = 'c:\tmp\test'
$NewString = Read-Host -Prompt 'Input New Name Please'
$OldString = 'SolutionName'
Get-ChildItem -Path $path | where {!$_.PsIsContainer} | foreach { (Get-Content $_).Replace($OldString,$NewString) | Set-Content -Path $_.FullName }
这将首先从中定义的文件夹中获取所有文件$path
,然后用$OldString
提示时用户输入的值替换in中给出的值,最后保存文件。
注意:脚本对文件内容是否更改没有任何影响。这将导致所有文件的修改日期得到更新。如果此信息对您很重要,则需要$OldString
在更改并保存文件之前添加检查以查看文件是否包含。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句