powershell - 如何写回使用通配符路径读取的同一文件?

标签 powershell windows-server-2012-r2

我使用以下 PowerShell 脚本删除 .CSV 文件中的引号:

(gc C:\TestQualifier*.csv) | % {$_ -replace '"', ""} | out-file C:\TestQualifier.csv -Fo -En ascii

该文件将始终命名为 TestQualifier,但文件名末尾可能带有日期和时间戳(例如 TestQualifier10082017091010)。通配符在源头处理这个问题,但我不知道如何将源文件名写入输出文件名。 Out-File 不接受通配符。

理想情况下,我还想在输出文件时覆盖现有文件。

任何帮助都会很棒。

最佳答案

提供另一种解决方案,该解决方案使用 -pv (-PipelineVariable) 通用参数 (PSv4+):

Get-Item C:\TestQualifier*.csv -pv file | % {
  (Get-Content $file.FullName) | % { $_ -replace '"' } |
    Out-File $file.FullName -Force -Encoding Ascii
}

* 如问题所示,Get-Content 调用包含在 (...) 中,以确保读取整个输入文件在前面,这可以将结果写回输入文件。
* 在这种情况下,并不严格需要 .FullName,但使用它更安全,因为 [System.IO.FileInfo] 实例并不总是/em> 字符串转换为文件的完整路径 - 请参阅 this GitHub issue .
* $_ -replace '"', "" 被缩短为 $_ -replace '"',因为没有指定替换字符串与指定空字符串相同。

请注意第一步中使用 Get-Item 来检索感兴趣的文件,以及 -pv file 如何定义变量 $file,然后代表 % (ForEach-Object) 脚本 block 内的输入文件。
更一般地说,$file 包含 Get-Item 在每个管道处理步骤中输出的 [System.IO.FileInfo] 实例,从而允许后续管道命令中的脚本 block 以引用它。

关于powershell - 如何写回使用通配符路径读取的同一文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45612932/

相关文章:

azure - 如何使用环境变量将输出从一个阶段传递到下一阶段?

regex - PowerShell正则表达式可过滤{{和}}之间的值

sharepoint - 用于列出所有 sharepoint 2010/2007 页面及其布局的 Powershell 脚本

Powershell 动态添加成员

java - Tomcat 特定的 webapp 变慢

windows - 如何删除 Windows 上以点 (.) 结尾的目录?

azure - 尝试清理我制作的 PS 脚本

salt-stack - Windows Server 2012 R2 上的 SaltStack Minion

windows - FuncOne() - 和 FuncTwo() 不工作

python - 在 Visual Studio Team Services 构建过程中 AWS CLI 安装在哪里