使用PowerShell将文件中的路径从斜杠改为反斜杠

4

我有一个配置文件,它最初来自于Unix环境,在其中基础路径(basepath)被替换为Windows中的基础路径:

inputdir = D:\etl-i_win_4/input/000/
inputdir = D:\etl-i_win_4/input/001/
inputdir = D:\etl-i_win_4/input/002/
inputdir = D:\etl-i_win_4/input/003/
inputdir = D:\etl-i_win_4/input/004/
inputdir = D:\etl-i_win_4/input/005/
inputdir = D:\etl-i_win_4/input/006/
inputdir = D:\etl-i_win_4/input/007/
inputdir = D:\etl-i_win_4/input/008/
inputdir = D:\etl-i_win_4/input/009/

movepostcmd = D:\etl-i_win_4/divider/bin/os-independant/divider.postprocessing

ctrldir = D:\etl-i_win_4/divider/applogs/

lockglob = /opt/netmind/test/etl-festo/kette/divider/applogs/dividerglob.lock

我需要正确的带有反斜杠的Windows路径。如何编写一个函数,读取配置文件并识别带有Windows路径的行,将所有的/替换为\?请注意,最后一行带有Unix路径应该被忽略。

在PowerShell中,通常情况下,路径中的反斜杠和正斜杠是可以互换使用的。所以,你确定你真的需要替换正斜杠吗? - Klas Mellbourn
2
https://dev59.com/tXVD5IYBdhLWcg3wL4cA - Ian Kenney
@Klas:这是一个C++程序的配置文件。它不支持带有斜杠的Windows路径。所以,是的,我需要将它们替换掉。 - mles
2个回答

2

你可以尝试使用以下方法来替换所有路径:

Get-Content "C:\temp\config.txt" | % {$_ -replace '/','\'} | set-content "C:\temp\config Bis.txt"

仅适用于Windows路径,每行包含一个Windows路径与“A_LETTER:\”模式匹配...这并不完美,但它可以完成工作:

Get-Content "C:\temp\path.txt" | % {if ($_ -match "[A-Z]:\\"){$_ -replace '/','\'}else {$_}} | set-content "C:\temp\path Bis.txt"

我会将模式设置为 [A-Z]:[A-Z]:[\\/],以防第一个路径分隔符也是 / - Ansgar Wiechers

-1
你也可以尝试使用 .Net 的 Path 类:
Get-Content "C:\temp\config.txt" | % { [System.Io.Path]::GetFullPath($_) }

这也会将Unix路径转换为Windows路径。 - Ansgar Wiechers

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接