我想找到一个与Bash相对应的Windows批处理副本,$@其中包含传递给脚本的所有参数的列表.
或者我不得不打扰shift?
我想从Windows批处理文件中调用一个jar文件.一个要求是能够将所有批处理文件参数原样传递给jar文件调用.例如,
必需的命令行:
foo.bat --flag1=x --flag2=y --flag3=z
Run Code Online (Sandbox Code Playgroud)
批处理文件foo.bat应该调用foo.jar如下:
java -jar foo.jar --flag1=x --flag2=y --flag3=z
Run Code Online (Sandbox Code Playgroud)
如何使批处理文件执行此操作?
我可以用%做一些批量变量魔术来做到这一点,但是有更简单的方法吗?
为了我在Windows中的安慰,我想准备一些像Unix一样启动的PHP工具.
FE: composer create-project symfony/framework-standard-edition path/
不: php composer.phar create-project symfony/framework-standard-edition path/
我在系统路径目录中创建了composer.bat文件:
php C:\path\to\composer\composer.phar
Run Code Online (Sandbox Code Playgroud)
它的作用仅仅是用法.但是如何将所有参数和标志转发到命令里?
这是我的args.bat档案:
@echo off
python -c "import sys; print(sys.argv)" %*
Run Code Online (Sandbox Code Playgroud)
我在这里调用python因为我确切地知道如何解释输出,而不是猜测字符串中的引号
如果我从cmd调用它会发生什么:
>.\args.bat ^^^^^
More?
More?
['-c', '^']
>.\args.bat "^^^^^"
['-c', '^^^^^']
Run Code Online (Sandbox Code Playgroud)
但这是powershell的作用:
PS> .\args.bat ^^^^^
['-c', '^']
PS> .\args.bat "^^^^^"
['-c', '^']
PS> .\args.bat '^^^^^'
['-c', '^']
PS> .\args.bat "'^^^^^'"
['-c', '^']
PS> .\args.bat '"^^^^^"'
['-c', '^^^^^']
Run Code Online (Sandbox Code Playgroud)
为什么在从PowerShell调用批处理文件时必须加倍引用该参数?
从powershell调用python不存在同样的问题:
PS> python -c "import sys; print(sys.argv)" "^^^^^"
['-c', '^^^^^']
PS> python -c "import sys; print(sys.argv)" '^^^^^'
['-c', '^^^^^']
PS> python -c "import sys; print(sys.argv)" ^^^^^
['-c', '^^^^^']
Run Code Online (Sandbox Code Playgroud)
但是从PowerShell调用python批处理时仍然存在!
PS> …Run Code Online (Sandbox Code Playgroud)