bat脚本获取html输入参数,在dos批处理脚本中将输入参数作为命令运行?

如何从输入参数在dos脚本中运行命令?

简化脚本bla.bat:

致电%1

称它为:

bla.bat" echo'hello'"(或bla.bat" git status")

错误:

无法将"" git status""识别为内部或外部命令,

可操作的程序或批处理文件。

如果我执行" CALL git status",它会起作用。

要记住的重要一点是,如果只是从命令行键入命令,则扩展后的文本必须看起来完全相同。 (实际上有一些例外,但这是一个很好的起点)。

要调试脚本,只需在调用之前放置回显:@echo call %1。现在尝试像以前一样运行:blah.bat"echo 'hello'"生成call"echo 'hello'"。尝试从命令行运行该命令-它不起作用。您需要call echo 'hello'。

一种解决方法是稍微更改脚本:~修饰符去除参数中的引号

或者,您可以放弃呼叫并仅使用以下命令(只要您没有呼叫要返回的另一个批处理文件)

@echo off

%~1

如果命令行上没有其他参数,则最好使用%*扩展为所有参数

@echo off

%*

REM or call %*

现在您可以像这样致电您的批次

blah.bat echo"hello"

请注意,批处理具有各种特殊情况,可能需要额外或不同的编码才能解决。太多了-只是期待意外。

看起来问题可能出在您的输入中带有引号,您需要停止将其分成不同的%n参数,但请尝试:

%~1将从输入中去除所有周围的引号。

%~$PATH:1将删除所有引号,然后在$ PATH env-var中搜索第一个匹配项,然后扩展字符串以包含命令的完整路径,这对于使用Windows发行版的git不起作用,因为git是批处理文件,cmd将查找git status.bat

如果要与git一起使用,则最好使用%?1和%?2来调用git,然后将参数提供给git批处理文件,或者直接通过修改$ PATH来调用git.exe。但是请记住,git.bat会在调用git本身之前进行一些环境设置。

感谢所有人提供的详细答案,添加?字符可以解决问题,即使带有" git status"也足够了

我认为您需要%1%来回显参数。这是我的la脚脚本,我认为该脚本可以满足您的echo测试要求:

bla echo hello

给出:

C:\tmp>echo bla

bla

C:\tmp>echo echo

echo

C:\tmp>CALL echo hello

hello

echo %0%

echo %1%

CALL %*

如果您想通过命令行参数进行解析,请告诉我。

问题在于参数之间的空格使您无法使用(这就是为什么您在git status周围使用引号)。

修改bla.bat以遍历命令行参数。这对我有用:

SETLOCAL ENABLEDELAYEDEXPANSION

SET VAR1=

FOR %%A IN (%*) DO (

SET VAR1=!VAR1! %%A

)

call %VAR1%

ENDLOCAL

然后,运行不带git status引号的bla.bat。

bla git status

本质上,此操作是遍历命令行参数,然后将它们全部作为一个命令执行。挑战来自DOS中的FOR循环,不允许您使用自己设置的变量,因此您需要启用变量的"延迟扩展"。然后,您要设置的变量需要封装在感叹号(而不是%)中。当然,!VAR1!之间的空间!和%% A可以防止参数在CALL中一起运行。

考虑到其他人在这里发表的答案,我不得不说。 我的方法肯定是"漫长的"方法。 执行CALL%*或CALL%?1应该可以做您想要的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值