2015-08-24 49 views
0

我有麻烦通过命令行参数,传递给一个bat文件,在PHP脚本将参数传递给一个bat文件,然后将它们传递给PHP脚本

这是我有:

@echo off 
echo %1% 
set foo=%1% 
php %~dp0%myscript.php %1% %2% %3% 

前三行工作。第四行工作,如果它仅仅是:

php %~dp0%myscript.php 

也适用,如果我硬代码的参数:

php %~dp0%myscript.php a b c 

,但如果它是:

php %~dp0%myscript.php %1% %2% %3% 

我得到以下错误:

Could not open input file: c:\dev\123 

我试过所有的fo以下语法为参数:

%1 
%1% 
"%1" 
"%1%" 
%* 
%*% 
"%*" 
"%*%" 

我在做什么错了?

+0

尝试'PHP “%〜dp0myscript.php” %1%2%3'。请注意'%〜dp0','%1'等中没有'%'后缀。另请阅读http://ss64.com/nt/syntax-args.html。 – JosefZ

回答

0

没关系想通了:

set pth=%~dp0%myscript.php 
php %pth% %1 %2 %3 

看来我必须做的两个步骤 - 看起来好像太多级联是混淆了。

+0

我没有关于此行为的任何官方信息,但是我通过反复试验发现,Windows命令解释程序只能在命令行中执行**两次**替换环境变量。这可能是自上世纪80年代以来的行为,并且在此期间他们并没有改善它的可悲。 – axiac

0

,我们在您行恶有余%百分号:

php %~dp0%myscript.php %1% %2% %3% 
     ^   ^^^

那么这行被解析如下:

  • php:字面意思理解;
  • %~dp0:结果为您的batcmd脚本的完整路径;
  • %myscript.php %:结果为空字符串;
  • 1% %2% %3%:结果为123,因为每个% %结果为空字符串,并且尾随%

作为每Command Line arguments (Parameters),使用

php %~dp0myscript.php %1 %2 %3