从 cmd 批处理文件中的路径中删除"file:"



我曾经使用过一个 Firefox 插件,它可以让我在我的系统上在外部编辑器中打开一个 html 文件。"内置"的用于测试,不允许您更新"本地"副本,并且现有插件只能在其他浏览器中打开内容。所以。。我决定尝试使用批处理文件来处理这个问题。这是我尝试测试的代码:

cls
set str=%1:~8%
echo. %str%

这是 Firefox 最终传递给批处理文件的一个例子:

file:///C:/Users/Patrick/Documents/Comics.html

预期的结果是 str 变得 C:/Users/Patrick/Documents/Comics.html 然后我可以通过批处理文件将其传递给编辑器。

这就是我得到的:

C:Users~Desktop>set str=file:///C:/Users/Patrick/Documents/Comics.html:~8
C:Users~Desktop>echo. file:///C:/Users/Patrick/Documents/Comics.html:~8
file:///C:/Users/Patrick/Documents/Comics.html:~8

我也尝试将 str 变量"to"设置为"%1,然后使用"set str=%str:~8%",但这只会给我":~8"。我想我不小心偶然发现了一个版本,它给了我"C:/Users/Patrick/Documents/Comics.html:~8",但是..是的,这甚至也不是正确的,我认为它以某种方式忽略了其中一个"set"函数,只是在每次我运行批处理时使生成的字符串变短......

我不知道这里出了什么问题,除非额外的问题有一些血腥愚蠢的问题:在那里,作为字符串的一部分。

我也考虑过改用powershell,但是..我必须告诉我的系统允许它执行,这会产生潜在的安全漏洞。

无论如何..实际上有没有办法管理它,或者 file:\\ 的存在不仅让我的编辑器拒绝加载它,而且还让批处理文件拒绝工作,根本没有?

您只能操作环境变量。不能操作命令行参数或 FOR 元变量。因此,您必须首先使用 SET 命令将命令行参数分配给变量。然后,您可以使用 sub 字符串方法删除前 8 个字符。

所以给定以下代码。

@echo off
set str=%~1
echo Input: %str%
set str=%str:~8%
echo Output: %str%

现在,如果我们运行批处理文件并使用您给出的示例作为批处理文件的命令行参数。 它看起来像这样。

C:BatchSO>foo.bat file:///C:/Users/Patrick/Documents/Comics.html
Input: file:///C:/Users/Patrick/Documents/Comics.html
Output: C:/Users/Patrick/Documents/Comics.html
C:BatchSO>

另一种选择是只执行字符串替换。

@echo off
set str=%~1
set str=%str:*file:///=%

最新更新