[问题] PowerShell工作目录路径含中括号字符问题

楼主: falcon (falken)   2020-10-22 18:28:46
作业系统:Windows 10
Service Pack:20H2
发生问题频率:100%
是否有做Windows Update:有
问题内容:PowerShell工作目录路径中带有中括号导致结果不如预期
PS D:\> Test-Path -LiteralPath "D:\[test] videos\test video 1.mp4"
True
PS D:\> Test-Path -LiteralPath "D:\test videos\test video 1.mp4"
True
PS D:\> Set-Location -LiteralPath "D:\test videos"
PS D:\test videos> Test-Path -LiteralPath "test video 1.mp4"
True
PS D:\test videos> Set-Location -LiteralPath "D:\[test] videos"
PS D:\[test] videos> Test-Path -LiteralPath "test video 1.mp4"
False
PS D:\[test] videos> $env:Path = "C:\ffmpeg\bin;" + $env:Path
PS D:\[test] videos> Start-Process -FilePath "ffmpeg" -ArgumentList '-i "test
video 1.mp4" -c copy output.mkv' -NoNewWindow -PassThru -Wait
Start-Process : 无法执行作业,因为万用字符路径 D:\[test] videos 无法解析成档案

位于 线路:1 字符:1
+ Start-Process -FilePath "ffmpeg" -ArgumentList '-i "test video 1.mp4" ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : OpenError: (D:\[test] videos:String) [Start-
Process], FileNotFoundException
+ FullyQualifiedErrorId : FileOpenFailure,Microsoft.PowerShell.Commands.
StartProcessCommand
如上所示若工作目录中带有中括号时用Test-Path判断相对路径皆回传False
Start-Process命令也会发生发生错误...
我想请问,除了使用绝对路径以外有什么解决方法?
作者: cancelpc (阿吉)   2020-10-22 18:55:00
一般是替换成2个双引号,就会当成一个双引号(溢出字符处理)看是那种语言,就配合该语言的溢出字符处理。加上看是谁执行路径,也要依那种方式处理
作者: LPH66 (-6.2598534e+18f)   2020-10-22 19:03:00
不对, 原 PO 的问题是 powershell 好像对工作目录里有 []的时候使用相对路径指定档案会有问题因为是相对路径所以指令里根本也就没有能跳脱的字符目前找得到的解决法都是绕个圈指定绝对路径, 例如用 $(pwd)展开成工作目录, 再丢给指令去做
楼主: falcon (falken)   2020-10-22 19:47:00
L大的意思是先($pwd+相对路径)组成完整路径在处理吗?但我用Start-Process执行$env:Path下的程式也会出错除非我放弃指定工作目录
作者: kobe8112 (小B)   2020-10-23 16:04:00
这篇的解答是你要的吗? https://tinyurl.com/y5gnwnw5
楼主: falcon (falken)   2020-10-23 16:55:00
我可以正常处里含中挂号的档案路径我遇到的问题是工作目录中含有中括号会出错

Links booklink

Contact Us: admin [ a t ] ucptt.com