我有一个在Powershell中运行的脚本,我希望能够在结果文本文件输出中的ccript名称和脚本内容本身之间放置一行。
目前,从下面的,行$str_msg = $file,[System.IO.File]::ReadAllText($file.FullName)
是我需要的,但我需要一个行来分隔$file
和下一个表达式的结果,我该怎么做?
foreach ($file in [System.IO.Directory]::GetFiles($sqldir,"*.sql",
[System.IO.SearchOption]::AllDirectories))
{
$file = [System.IO.FileInfo]::new($file);
$Log.SetLogDir("");
$str_msg = $file,[System.IO.File]::ReadAllText($file.FullName);
$Log.AddMsg($str_msg);
Write-Output $str_msg;
# ...
}
3条答案
按热度按时间bxfogqkk1#
$str_msg = $file,[System.IO.File]::ReadAllText($file.FullName)
不会创建一个 string,它创建了一个2元素的 array([object[]]
),由$file
[System.IO.FileInfo]
示例和包含该文件内容的字符串组成。.AddMsg()
方法需要单个字符串,因此PowerShell将数组字符串化,以便将其转换为单个字符串;**默认情况下,PowerShell通过 * 串联元素(以单个空格作为分隔符)***来字符串化数组;例如:[string] (1, 2)
产生'1 2'
。因此,最好将
$str_msg
组成一个 string 作为开始,并使用一个显式换行符作为分隔符,例如:注意,转义序列
"
rn"
用于生成CRLF(Windows特有的换行符序列);在类Unix平台上,您只需使用"
n"(LF)。 .NET提供了一个跨平台抽象
[Environment]::NewLine,它返回适合平台的换行符序列(您也可以将其作为
$([Environment]::NewLine)嵌入
"..."中)。 字符串插值的替代方法是使用字符串格式设置运算符
-f,它基于.NET
String.Format()`方法:ujv3wf0j2#
在PS中,使用Backtick-r+backtick-n会在新行中执行回车。您可以将$file变量作为新的数组变量执行Get-Content操作,并在特定索引处插入回车:
示例文件:test123.txt
如果文件内容如下:
将内容存储在数组变量中,以便具有索引
要在第2行和第3行之间添加回车符:
然后输出一个新文件:
7tofc5zh3#
您需要使用回车符powershell特殊字符,即“′ r”。
像这样使用它在行中添加回车符:
检查this documentation以获得关于Poewershell特殊字符的更多详细信息。