使用文件名中的变量查找文件(获取内容)

时间:2015-12-19 19:30:27

标签: powershell variables batch-file parameters

我想创建一个小脚本来查找和替换文件中的多个字符串(使用批处理和PowerShell的组合)。这些文件总是不同的,因此我始终需要进入批处理并更改Get-ContentOut-File的文件名。 现在我添加了一个插入文件名的提示,我将其赋予参数,因此我可以以某种方式搜索和编辑$filename.txt

这里的普通PowerShell代码只替换了一个字符串(我稍后会在一个批处理文件中将其集成):

$filename = Read-Host -Prompt 'Input filename'
(gc $filename.txt) -replace 'foo', 'bar' | Out-File $filename.txt

由于这个脚本位于同一个文件夹中,就像文件一样,我不需要路径。

我还发现gc无法读取变量,这正是我的问题所在:我收到错误代码,参数无法绑定到&# 34;路径"因为它是NULL。

我找不到其他类似的东西,发现很多关于如何输出文件变量的线程或如何将文件内容变成变量但是没有任何东西适合我的情况所以我非常感谢你们的任何帮助!

1 个答案:

答案 0 :(得分:1)

PowerShell允许您使用单字符串或变量而不添加引号,因此以下两个语句将起作用:

Get-Content foo.txt
Get-Content $filename

但是,如果要使用由变量和字符串构成的参数,则需要将表达式放在双引号中:

Get-Content "$filename.txt"

或使用子表达式连接变量和字符串:

Get-Content ($filename + '.txt')

话虽如此,因为在您的情况下,您在多个地方使用文件名,最好将扩展名附加到您的输入并仅使用变量:

$filename = Read-Host -Prompt 'Input filename'
$filename += '.txt'
(Get-Content $filename) -replace 'foo', 'bar' | Set-Content $filename