2015-04-02 76 views
0

我试图做到这一点:如何将命令行参数传递给Windows批处理文件中的程序?

cd C:\Users\Public 
%1 /s 

%1中的名称和可执行改变根据在那里它被执行,但在其他方面是相同的。问题是/s被视为命令或程序,而不是在%1中传递的可执行文件的参数。我正在尝试做什么?如果是这样,语法是什么?

+0

可能的重复[如何将命令行参数传递给批处理文件?](http://stackoverflow.com/questions/26551/how-to-pass-command -line-parameters-to-a-batch-file) – SomethingDark 2015-04-02 21:06:20

回答

0

感谢所有帮助球员。我查看了文档和您的意见,尽管我仍然完全不确定这实际上应该如何工作,但我明白了它的工作原理。这是我想出的解决方案:

"%~1" /s 
+0

如果我或**任何其他**答案有帮助,请考虑将其标记为已接受。 [见本页](http://meta.stackexchange.com/questions/5234/)解释为什么这很重要。 – JosefZ 2016-02-24 12:25:49

0

如果您保存testit.bat的内容,然后在运行时将其添加到批处理文件名后面:“testit dir”,它将使用/ s开关运行dir命令。

+0

让我确定我明白了这一点,我是一个Unix家伙,所以Windows批处理文件对我来说完全是陌生的。如果我有一个名为runit.bat的批处理文件,并输入“runit executable”,那么可执行文件将与/ s开关一起运行?如果我正确理解这一点,如果传递给%1的参数包含空格,我该怎么办? – Jonathan 2015-04-02 21:17:29

+0

如果您在Windows中访问dos提示符(单击开始按钮并在“搜索程序和文件”中键入cmd并按回车)。这应该打开一个dos窗口。在该dos窗口中,切换到testit.bat文件所在的文件夹(cd \ users \ public)。 – Eric 2015-04-02 22:09:10

+0

抱歉,首先将您的批处理文件更改为%〜1而不是%1。然后当你运行它时键入:testit“dir/p” – Eric 2015-04-02 22:19:47

0

下一个例子可以帮助。注:

cliparsearg.bat脚本打印所有命令行参数:

==>type cliparsearg.bat 
@echo OFF >NUL 
set /A "ii=0" 
:loopfor 
    echo param %%%ii% = %0 
    SHIFT 
    set /A "ii+=1" 
if not [%0]==[] goto :loopfor 
echo all %%* = %* 
goto :eof 

==>cliparsearg.bat withoutspaces /S 3rdPar 
param %0 = cliparsearg.bat 
param %1 = withoutspaces 
param %2 = /S 
param %3 = 3rdPar 
    all %* = withoutspaces /S 3rdPar 

==>cliparsearg.bat with 2 spaces /S 3rdPar 
param %0 = cliparsearg.bat 
param %1 = with 
param %2 = 2 
param %3 = spaces 
param %4 = /S 
param %5 = 3rdPar 
    all %* = with 2 spaces /S 3rdPar 

==>cliparsearg.bat "with 2 spaces" /S 3rdPar 
param %0 = cliparsearg.bat 
param %1 = "with 2 spaces" 
param %2 = /S 
param %3 = 3rdPar 
    all %* = "with 2 spaces" /S 3rdPar 

资源(基本必需的读取 Windows批处理脚本):

相关问题