使用命令行参数的“%~dp0”不起作用


1

正在为一个软件编写部署脚本,该软件需要以静默方式从移动源(也就是说,该文件夹可能位于密钥上,服务器上,本地上等)安装Visual C ++ 2013 Redistributable,作为Admin。

对于我所有的其他可执行文件(主要是MSI),在文件名之前使用“%~dp0”(如:“%~dp0Antidote9.msi”,后面跟/ quiet,/ q等参数)工作正常。

但对于VC Redist,它不接受我的论点。

这是我的完整命令:

start /wait "%~dp0vcredist_x64.exe" /install /quiet /norestart

它拉文件很好,但后来说我的参数是无效的,即使我删除%~dp0它工作正常,我从vcredist_x64.exe /?得到了参数。

有什么我做错了或者我需要修改我的论据才能工作吗?

提前致谢!

Answers:


2

你可以用 %CD%\ 这代表 当前目录 代替 %~dp0

我没有发现这两者之间有任何区别。

如果您使用,请注意 start 命令,最佳做法是添加额外的 "" 在程序启动之前,在一个引号中包含所有参数,并在必要时转义引用的参数。例:

start /wait "" "%CD%\MyProgram.exe /link \"MyOtherDLL.dll\""

嘿! %CD%不起作用。我使用%~dp0的原因是因为它需要拉出CMD文件所在的路径,因为它将以管理员身份运行。如果我使用%CD%,它会调高C:\ Windows \ system32。
Alex Pilon

@AlexPilon尝试在后面添加一个\(反斜杠)表示路径的末尾 %~dp0,然后继续您的程序可执行文件。还有你尝试添加额外的 ""?通过语法, start 将第一个参数作为窗口标题(可能是旧的DOS风格的程序),将第二个参数作为可执行路径(以及该特定程序的相应参数,包含在相同的引用中,使用正确转义的子引号)。
Vassile

实际上,我在发布之前正在编辑我的评论大声笑我找到了一种方法来做到这一点,并提供了一些帮助。在开始时添加额外的“”就可以了。如果我添加整个路径&引号中的参数虽然它会考虑路径&参数作为文件名。所以我的最后一行是:开始/等待“”“%~dp0vcredist_x64.exe”/ install / quiet / norestart它完美无缺!谢谢你的帮助 :)
Alex Pilon

@AlexPilon酷。你还帮我澄清了两者之间的差异。
Vassile
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.