我可以在文件前面加上$newstring的内容。
$sourceDirectory = "C:\SFTP_Root\kcmosdftp\"
$keyword = "User_ID|User_Alt_ID"
$newString = "User_ID|User_Alt_ID|Home_Room_Teacher|User_Group_ID|User_First_Name|User_Middle_Name|User_Last_Name|User_Library|User_Profile|User_Category1|User_Category2|User_Category3|User_Category4|User_Category5|User_Category10|User_Priv_Granted|User_Priv_Expires|Password|Street|City_State|zip|Email|PHONE|User_Birth_Date"
# Set the file name to search for
$fileName = "INBOUND-Student_New_File_Format.txt"
# Get the latest file in the source directory
$latestFile = Get-ChildItem -Path $sourceDirectory | Sort-Object LastWriteTime -Descending | Select-Object -First 1
# Check if the latest file contains the specified keyword
$containsKeyword = (Get-Content $latestFile.FullName) | Select-Object -first 1
if ($containsKeyword -notmatch $keyword) {
# Read the contents of the latest file
$fileContents = Get-Content $latestFile.FullName
# Insert the new string at the beginning of the contents
$fileContents = $newString + "`r`n" + $fileContents
# Determine the new file path
$newFilePath = Join-Path -Path $sourceDirectory -ChildPath "Modified_$($latestFile.Name)"
# Write the modified contents to the new file
$fileContents | Set-Content $newFilePath
Write-Host "Added the string to the first row of $($latestFile.Name). New file saved as $($newFilePath)."
}
else {
Write-Host "The latest file already contains the keyword."
}
不过,新的“修改”文件只有两行。在某些地方,这段代码删除了原始文件($filename)中的所有回车和新行。
不知道我在这里哪里错了。
2条答案
按热度按时间nhaq1z211#
Get-Content
默认返回文本文件中的各行,一行接一行,当捕获时,它变成一个 * 数组 *。因此,以下内容 * 不 * 按预期工作:
$fileContents = $newString + "
rn" + $fileContents
它向
$newString + "
rn"
追加一个 array,并且当PowerShell stringifies 一个数组时,它 * 用空格 * 连接其元素(默认情况下;很少使用的$OFS
首选项变量可以改变这一点);尝试"foo: " + 1, 2, 3
,它将产生逐字的foo: 1 2 3
。在您的情况下,最简单且性能更好的解决方案是使用
Get-Content
的-Raw
开关将文件读取为 * 单个多行 * 字符串,在这种情况下,字符串连接将按预期工作。但是,考虑到
Set-Content
的工作方式,您甚至不需要字符串连接,并且可以传递两个字符串-新的标题行和带有现有文件内容的多行字符串- * 分开 *:vaqhlq812#
更改以下内容:
To(注意
-Raw
的用法):这样
$fileContents
就变成了一个单个多行字符串,而不是一个字符串数组。当你试图在操作的左手边将一个字符串与一个数组连接起来时,该数组被强制转换为字符串,因此由
$OFS
(默认情况下是一个空格``)连接。示例:
输出:
而不是你所期望的: