使用Chrome和PowerShell打开带参数本地文件时#被转义问题求解
问题原因
#被转义为%23的核心原因是:直接传递Windows本地文件路径(形如C:\xxx\xxx.html)给Chrome时,Chrome会将其识别为文件系统路径而非标准URL,会自动对路径中的所有特殊符号做URL编码,其中就包括#符号,所以被转成了%23,导致哈希参数失效。
解决方法
需要先把本地文件路径转换为标准file://协议格式的URL,再拼接哈希参数,Chrome就会正确识别#为哈希分隔符,不会进行转义。
修正后代码
$MediaName = "Test_Media" $CurrentLocation = Get-Location $PreviewTemplateLocation = "$($CurrentLocation.Drive.Name):\\Work_all\Tools\Script\MCD\Script\template" $TemplateIndexLocation = Join-Path -Path $PreviewTemplateLocation -ChildPath "index.html" # 将本地路径转换为标准file协议URL $FileUri = [System.Uri]$TemplateIndexLocation # 拼接哈希参数后再和启动参数组合 $ChromeArgs = "$($FileUri.AbsoluteUri)#media=$($MediaName) --incognito --disable-web-security --auto-open-devtools-for-tabs --user-data-dir=C:/chromeTemp" [System.Diagnostics.Process]::Start("chrome.exe", $ChromeArgs)
补充说明
[System.Uri]转换会自动处理路径中的反斜杠、特殊字符编码问题,不需要手动拼接file://前缀,避免出错- 转换后的
AbsoluteUri本身就是符合URL规范的格式,后续拼接的#会被Chrome正确识别为哈希片段的起始标识,不会被编码
内容的提问来源于stack exchange,提问作者Sebastian Bernardotti
相关产品推荐
相关产品推荐

