Windows系统PowerShell与CMD中反斜杠的同类替代写法咨询
Windows 下不管是 PowerShell 还是 cmd.exe,都存在和 Linux ${HOME:0:1} 逻辑完全一致、无需自定义变量即可获取反斜杠路径分隔符\的原生写法,核心是利用内置主目录相关环境变量的默认值特性做字符串截取。
PowerShell 实现
Linux 对应写法的逻辑是取$HOME变量(当前用户主目录路径)的第1个字符:因为Linux主目录路径以/开头,截取结果自然就是斜杠分隔符。
PowerShell 中对应的内置环境变量是$env:HOMEPATH,它的默认值为\Users\当前用户名,第一个字符恰好就是反斜杠\,直接取字符串索引0的字符即可:
# 该表达式计算结果就是字符 \ $($env:HOMEPATH[0])
用法和Linux完全对齐,比如要读取C:\Windows\win.ini文件,命令可以写成:
Get-Content C$($env:HOMEPATH[0])Windows$($env:HOMEPATH[0])win.ini
实际执行效果和直接写Get-Content C:\Windows\win.ini完全一致。
如果不需要严格对齐Linux的变量截取逻辑,也可以直接用.NET内置的路径分隔符常量,写法更短:
[IO.Path]::DirectorySeparatorChar
cmd.exe 实现
cmd 本身自带变量截取语法,格式为%变量名:~起始索引,截取长度%,同样可以利用内置的%HOMEPATH%环境变量(默认值和PowerShell中一致,以\开头),取索引0位置、长度为1的子串,即可得到反斜杠分隔符:
REM 该变量替换结果就是字符 \ %HOMEPATH:~0,1%
用法示例,比如用type命令读取C:\Windows\win.ini,可以写成:
type C%HOMEPATH:~0,1%Windows%HOMEPATH:~0,1%win.ini
cmd在解析命令时会自动把%HOMEPATH:~0,1%替换为\,执行效果和原命令无差异。
注意事项
- 以上写法均依赖系统默认的
HOMEPATH环境变量配置,普通用户默认不会修改该变量,在常规Windows系统下可以稳定生效。 - 不建议用其他内置变量(比如当前路径
%CD%、系统目录变量)做截取,这类变量的内容随运行环境变化大,截取位置不固定,容易出现匹配错误。
内容的提问来源于stack exchange,提问作者jagghy
相关产品推荐
相关产品推荐

