Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
批处理文件中的URL解码_Url_Batch File_Urldecode - Fatal编程技术网

批处理文件中的URL解码

批处理文件中的URL解码,url,batch-file,urldecode,Url,Batch File,Urldecode,如何在批处理文件中“urldecode”以下字符串?我需要更改以下内容 http://www.example.com/some-page/some/link.html 对此 http://www.example.com/some-page/some/link.html 它可以用Javascript和decodeURIComponent()完成,但我不知道如何在MSDOS中的批处理文件中

如何在批处理文件中“urldecode”以下字符串?我需要更改以下内容

http://www.example.com/some-page/some/link.html
对此

http://www.example.com/some-page/some/link.html
它可以用Javascript和decodeURIComponent()完成,但我不知道如何在MSDOS中的批处理文件中完成

 @if (@x)==(@y) @end /***** jscript comment ******
     @echo off
    set "url=http://www.example.com/some-page/some/link.html"
     cscript //E:JScript //nologo "%~f0" "%url%" 
     exit /b 0

 @if (@x)==(@y) @end ******  end comment *********/

 var args=WScript.Arguments;
 //WScript.Echo(args.Item(0));
 WScript.Echo(decodeURIComponent(args.Item(0)));
虽然这肯定不是uri编码的url

它可以用Javascript和decodeURIComponent()完成,但我不知道如何在MSDOS中的批处理文件中完成

 @if (@x)==(@y) @end /***** jscript comment ******
     @echo off
    set "url=http://www.example.com/some-page/some/link.html"
     cscript //E:JScript //nologo "%~f0" "%url%" 
     exit /b 0

 @if (@x)==(@y) @end ******  end comment *********/

 var args=WScript.Arguments;
 //WScript.Echo(args.Item(0));
 WScript.Echo(decodeURIComponent(args.Item(0)));
不适用于
decodeURIComponent()
,不适用。尽管如此,解决方案仍然在于调用JavaScript。您可以通过JScript调用IE7JavaScript引擎。有关batch+JScript混合脚本的更多示例

没有内置的JavaScript函数将HTML实体(
ÿ;
字符)转换回纯文本,但是您自己的转换并不困难

@如果(@code节==@Batch)@那么
::批量部分
@回音
setlocal
设置“url=http:;/;/;www.example.com/;some page/;some/;link.html”
cscript/nologo/e:JScript“%~f0”“%url%”
后藤:EOF
@结束
//JScript部分
功能实体(什么){
返回what.replace(/&#x([0-9a-f]{2});/ig,函数(m,$1){
返回字符串.fromCharCode(parseInt($1,16));
});
}
Echo(解码实体(WSH.Arguments(0));

作为一个学术练习,这里有一个将HTML字符实体转换为ASCII的纯批处理方法。它比JScript混合版稍微慢一点,并且可能会处理包含感叹号的字符串

@echo关闭
延迟扩展
设置“url=http:;/;/;www.example.com/;some page/;some/;link.html”
设置“url=%url:&#x=;0x%”
:开始
对于(%url%)中的%%I,请执行以下操作(
设置“chunk=%%~I”
如果“!chunk:~0,2!”==“0x”如果“!chunk:~4,1!”==”(
对于/f“delims=”%%x英寸(
'forfiles/m“%~nx0”/c”cmd/c echo(%%~I”'
)设置“url=!url:;%%I;=%%~x!”
开始
)
)
)
回声!网址!

这可以在纯批量生产中实现

@echo off
setlocal EnableDelayedExpansion

set "input=http://www.example.com/some-page/some/link.html"

rem Define the equivalences
for %%a in ("#x3a=:" "#x2f=/") do (
   for /F "tokens=1,2 delims==" %%b in (%%a) do set "replace[%%b]=%%c"
)

echo Input = "%input%"
set "input=%input:&=\%"
set "output="
for %%a in (%input%) do (
   for /F "tokens=1,2 delims=\" %%b in ("%%a")  do (
      if "%%c" neq "" (
         set "output=!output!%%b!replace[%%c]!"
      ) else (
         set "term=%%a"
         if "!term:~0,1!" equ "\" (
            set "output=!output!!replace[%%b]!"
         ) else (
            set "output=!output!%%b"
         )
      )
   )
)
echo Output = "%output%"

我替换了
http://w3schools.com/my test.asp?name=ståle&car=saab
以下W3Schools站点中的字符串,以及我要解码的字符串。它成功地解码了它,所以我认为这是一个Javascript方法@user2146441
decodeURI
和类似的解码百分比代码--
http%3A%2F%2F
和类似的代码。可能是您的浏览器或后端为您翻译了实体。耸耸肩如果我在JScript中运行字符串
decodeURI
,它的结束与开始完全一样。没有要解码的百分比代码。什么。。。你怎么。。。嗯!这里没有任何计算,没有十六进制到dec到charcode的转换,只是有很多代码可以直接从
:
/
/
。你可以只做
set“input=%input::;=:%”
set“input=%input:/;=/%”
一天,你知道的。:)挑战:刮削
&#xNN并将NN转换为它所表示的ASCII字符。