- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我已经在这里坐了三天了,试图解决以下问题。我需要一个可以将 url 作为参数传递给的调用函数。但是,此 URL 有一个 &
,一旦我将变量作为调用参数传递,它就不再起作用。我无法在 Url 中设置 /&
,因为它是动态 Url。
每个网址均以 https://
开头,以 &dl=1
结尾
@echo off
setlocal enabledelayedexpansion
set "url=!array[2]!"
call :do_download
:do_download
powershell -c "[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12;
Invoke-WebRequest '%url%' -OutFile 'C:\Program Files (x86)\test.zip'"
但是如果我尝试使用所有版本的引号、双引号、修剪或其他技巧,它就不起作用:´(我还不知道。但我需要 Url 作为调用参数。
@echo off
setlocal enabledelayedexpansion
set "url=!array[2]!"
call :do_download "%url%"
:do_download
powershell -c "[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12;
Invoke-WebRequest '%1' -OutFile 'C:\Program Files (x86)\test.zip'"
如果你自己尝试一下:您可以使用以下命令保存 packs.txt
:
Testlink
https://sync.luckycloud.de/d/76ffff3d76ea4e9ab15e/files/?p=%2FTest.txt&dl=1
该链接是从 lorem ipsum 下载一个包含 200 个单词的 .txt
文件。这是完整的代码,此时可以工作,但没有 call-param。您可以根据需要设置路径,这只是示例。该代码自行运行;使用 !
是因为稍后它将位于 if
内,但该代码独立于该代码。
@echo off
setlocal enabledelayedexpansion
call :readtest
pause
call :do_download
pause
:readtest
set count=0
for /f "usebackq tokens=*" %%A in ("C:\Program Files (x86)\Steam\steamapps\common\packs.txt") do (
set /a count+=1
set url[!count!]=%%A
)
set "pack_sd=!url[2]!"
goto :eof
:do_download
powershell -c "[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; Invoke-WebRequest '%pack_sd%' -OutFile 'C:\Program Files (x86)\Steam\steamapps\common\test.txt'"
goto :eof
如果我尝试使用 use 来回答::"=
call :do_download "%pack_sd%"
:do_download
echo TT %1 TT
set "url=%1"
set test=%url:"=%
echo "TT %test% TT"
第一个回声:
TT "https://sync.luckycloud.de/d/76ffff3d76ea4e9ab15e/files/?p=FTest.txt&dl=1" TT
第二个回声:
error: command "dl" is wrong or unknown...
"TT "= TT"
如果我尝试用 %~1 回答
call :do_download "%pack_sd%"
:do_download
echo TT %1 TT
set url=%~1
echo "TT %url% TT%
第一个回声:
TT "https://sync.luckycloud.de/d/76ffff3d76ea4e9ab15e/files/?p=FTest.txt&dl=1" TT
第二个回声:
error: command "dl" is wrong or unknown...
"TT https://sync.luckycloud.de/d/76ffff3d76ea4e9ab15e/files/?p=FTest.txt TT"
如果我在 powershell 命令中使用答案:'%1:"=':
call :do_download "%pack_sd%"
:do_download
powershell -c "[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; Invoke-WebRequest '%1:"=' -OutFile 'C:\Program Files (x86)\Steam\steamapps\common\test.txt'"
goto :eof
error: "The string has no terminator: '."
最佳答案
问题归结为:
支持的要求不仅仅是 &
还有%
不幸的是,URL 中的字符使解决方案变得非常复杂,因为 cmd.exe
(不恰本地)通过 call
将参数的逐字值传递给子例程。字符串插值,这需要将 %
加倍。值以保存它们。
因此,从带有 for /f
的文件中读取 URL一定有它的%
以编程方式加倍,然后将其作为参数传递给 call :do_download
,这是一项不平凡的任务 - 请参阅下面的代码和源代码注释。
请注意,如果您的网址还包含 !
,则需要额外努力。字符。
在您的 :do_download
中子程序,使用set "url=%~1"
。这将存储 %1
的未加引号值(第一个参数)在变量 %url%
中
请勿使用set "url=%1"
或set url=%~1
,这两个都可以预见地中断为 %1
嵌入双引号并包含 &
的值.
请勿使用 %1:"=
,它不会做你认为它会做的事情。 %1
是一个参数,而您尝试使用的字符串替换语法仅适用于变量(例如 %url:"=%
)
然后你可以使用%url%
"..."
内的原样形成 powershell -c
的字符串参数 - 或者你可以使用 %~1
直接。
与中间%url%
变量,但是,您也可以利用以下事实:所有 cmd.exe
变量(但不是参数,例如 %1
)也是环境变量,因此允许 PowerShell 通过环境变量引用访问 URL > 而不是直接将其嵌入到命令字符串中(相当于 cmd.exe 的 %url%
在 PowerShell 中为 $env:url
)。也就是说,您可以替换 powershell
请使用以下内容进行调用 - 请注意如何括起 '...'
不得使用引用作为 PowerShell 命令的一部分:
powershell -c "Write-Output $env:url"
这是一个最小的示例,显示包含 &
的 URL和%
字符正确传递到 PowerShell;代码中的其他所有内容都是偶然的(使用 for /f
,PowerShell 命令的细节):
@echo off
setlocal enabledelayedexpansion
:: Use a sample URL that contains both & and % characters.
:: Note: The % must be DOUBLED here in order to escape it.
:: The resulting string will only have ONE %, as desired and will therefore
:: literally be the following, as it would be read from a file with `for /f`:
:: http://example.org?p=%2FTest.txt&dl=1
set "url=http://example.org?p=%%2FTest.txt&dl=1"
:: Unfortunately, using `call` requires escaping of % even in variable values,
:: as the embedded single % are then again subject to variable expansion
:: (even though they shouldn't be).
:: Doubling % *programmatically* is non-trivial and requires a helper variable
:: as well as mixing up-front and delayed expansion.
:: The following string substitution effectively doubles the embedded % chars.
:: so that the :do_download subroutine again sees them as verbatim single ones.
set "pct=%%"
call :do_download "!url:%pct%=%%%%!"
goto :eof
:do_download
set "url=%~1"
powershell -c "Write-Output '%url%'"
goto :eof
上面逐字打印 http://example.org?p=%2FTest.txt&dl=1
,证明 URL 已正确传递到 PowerShell。
关于powershell - 使用带有 "&"和 "%"的变量时出现引号问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71287991/
我想使用 li 和 ul 制作一个多级下拉列表,以便显示我博客中按年和月排序的所有文章。我希望我的下拉菜单看起来像 Google Blogspot 下拉菜单: 这是我的 CSS 和 HTML 代码 u
我在 Win 7 64 机器上将 CodeBlocks 与 gcc 4.7.2 和 gmp 5.0.5 结合使用。开始使用 gmpxx 后,我看到一个奇怪的段错误,它不会出现在 +、- 等运算符中,但
我正在使用 tern 为使用 CodeMirror 运行的窗口提供一些增强的智能感知,它工作正常,但我遇到了一个问题,我想添加一些自定义“types”,可以这么说,这样下拉列表中它们旁边就有图标了。我
我正在尝试让我的 PC 成为 Android 2.3.4 设备的 USB 主机,以便能够在不需要实际“附件”的情况下开发 API。为此,我需要将 PC 设置为 USB 主机和“设备”(在我的例子中是运
很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visit the help center . 关闭 9
我在设置服务器方面几乎是个新手,但遇到了一个问题。我有一个 Ubuntu 16.04 VPS 并安装了 Apache2 和 Tomcat7。我正在为 SSL 使用 LetsEncrypt 和 Cert
我在一个基于谷歌地图的项目上工作了超过 6 个月。我使用的是 Google Maps API V1 及其开发人员 API key 。当我尝试发布应用程序时,我了解到 Google API V1 已被弃
我是 Python 的新手,所以如果我对一些简单的事情感到困惑,请原谅。 我有一个这样的对象: class myObject(object): def __init__(self):
这个问题已经有答案了: How can I access object properties containing special characters? (2 个回答) 已关闭 9 年前。 我正在尝
我有下面的 CSS。我想要的是一种流体/液体(因为缺乏正确的术语)css。我正在为移动设备开发,当我改变模式时 从纵向 View 到陆地 View ,我希望它流畅。现在的图像 在陆地 View 中效
我正在尝试使用可以接受参数的缓存属性装饰器。 我查看了这个实现:http://www.daniweb.com/software-development/python/code/217241/a-cac
这个问题在这里已经有了答案: Understanding slicing (36 个答案) 关闭 6 年前。 以a = [1,2,3,4,5]为例。根据我的直觉,我认为 a[::-1] 与 a[0:
mysqldump -t -u root -p mytestdb mytable --where=datetime LIKE '2014-09%' 这就是我正在做的事情,它会返回: mysqldum
我正在制作销售税计算器,除了总支付金额部分外,其他一切都正常。在我的程序中,我希望能够输入一个数字并获得该项目的税额我还希望能够获得支付的总金额,包括交易中的税金。到目前为止,我编写的代码完成了所有这
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许在 Stack Overflow 上提出有关通用计算硬件和软件的问题。您可以编辑问题,使其成为
我是否必须进行任何额外的设置才能让 apache-airflow 在任务失败时向我发送电子邮件。我的配置文件中有以下内容(与默认值保持不变): [email] email_backend = airf
这个问题在这里已经有了答案: What does the $ symbol do in VBA? (5 个回答) 3年前关闭。 使用返回字符串(如 Left)的内置函数有什么区别吗?或使用与 $ 相同
我有一个用VB6编写的应用程序,我需要使用一个用.NET编写的库。有什么方法可以在我的应用程序上使用该库吗? 谢谢 最佳答案 这取决于。您可以控制.NET库吗? 如果是这样,则可以修改您的库,以便可以
当我创建一个以 ^ 开头的类方法时,我尝试调用它,它给了我一个错误。 class C { method ^test () { "Hi" } } dd C.new.test; Too m
我已经使用 bower 安装了 angularjs 和 materialjs。 凉亭安装 Angular Material 并将“ngMaterial”注入(inject)我的应用程序,但出现此错误。
我是一名优秀的程序员,十分优秀!