首页 > 解决方案 > 从文件中删除孤立的回车

问题描述

我有一个日常流程,将管道分隔的文件下载并解析到数据库中。有时,这些文件在一行中的一个字段的末尾包含一个回车符(没有换行符),这会破坏我的流程。我的调度程序(不是我们公司内部的 Windows 调度程序)允许我在将这些文件加载​​到数据库之前对这些文件运行批处理或 PowerShell 进程,因此我想在字段末尾删除任何孤立回车的实例( \r|)。

此 PowerShell 命令在手动运行时有效:

(Get-Content CarriageReturnTest.txt -Raw).Replace("`r|","|") | Set-Content CarriageReturnTest.txt -Force

但是,当我把它放在调度程序中时,我得到一个错误,'","' 不被识别为内部或外部命令。我意识到调度程序必须运行一个 windows 命令,PowerShell "{command}"所以双引号使命令行认为我正在运行几个不同的命令。我尝试用单引号替换 PowerShell 命令中的双引号,如下所示:

(Get-Content CarriageReturnTest.txt -Raw).Replace('`r|','|') | Set-Content CarriageReturnTest.txt -Force

这会通过调度程序运行,但实际上并没有从文件中删除任何内容,因为当 ` 用单引号括起来时,PowerShell 会将其解释为转义字符。

我试过用双引号转义,"", `", \", and ^"但似乎没有任何效果。

我意识到我可以编写一些更长的批处理脚本来处理这个问题,但理想情况下,这将是一个适合调度程序的内衬。我还研究过将脚本保存为 ps1 文件并使用文件路径作为参数运行它,但我也没有让它工作。

标签: powershellcommand-line

解决方案


根据@JosefZ 所说的,我尝试了这个并且它有效:

(Get-Content CarriageReturnTest.txt -Raw) -replace('\r\|','|') | Set-Content CarriageReturnTest.txt -Force

-replace让我在单引号'\r'而不是双引号中使用正则表达式,这"`r"让我无法逃脱


推荐阅读