从cmd批处理文件中的路径中删除“文件:”

时间:2018-09-08 03:10:01

标签: batch-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变量设置为“%1”,然后使用“ set str =%str:〜8%”,但这只是给我“:〜8”。我想我偶然偶然发现了一个给我“ C:/Users/Patrick/Documents/Comics.html:〜8”的版本,但是..是的,那也不是很正确,我认为是每次我运行批处理时,都会以某种方式忽略“设置”函数之一,而只是使结果字符串变短...

我不知道这是怎么回事,除非字符串中有多余的多余的东西:血腥愚蠢的问题。

我还考虑过改用Powershell,但是..我必须告诉我的系统允许它执行,这会造成潜在的安全漏洞。

无论如何..实际上有某种方法可以解决此问题,或者文件是否存在:\\里面的东西不仅使我的编辑器拒绝加载它,而且使批处理文件拒绝工作,完全吗?

1 个答案:

答案 0 :(得分:1)

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

因此给出以下代码。

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

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

C:\Batch\SO>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:\Batch\SO>

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

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