相关疑难解决方法(0)

如何检查".bat"文件中的命令行参数?

我的操作系统是Windows Vista.我需要一个".bat"文件,我需要检查用户是否输入任何命令行参数.如果那么,如果参数等于-b那么我会做一些事情,否则我将标记"无效输入".如果用户没有输入任何命令行参数,那么我会做一些事情.我创建了以下.bat文件.它适用于-b和不等于-b案例 - 但是当用户没有传递任何命令行参数时它会失败.

我总是得到错误:

GOTO was unexpected at this time.
Run Code Online (Sandbox Code Playgroud)

谁能告诉我这里我做错了什么?


ECHO OFF
CLS
ECHO.

IF [%1]==[/?] GOTO BLANK

IF %1=="-b" GOTO SPECIFIC

IF NOT %1=="-b" GOTO UNKNOWN

:SPECIFIC

ECHO SPECIFIC

GOTO DONE

:BLANK

ECHO No Parameter

GOTO DONE

:UNKNOWN

ECHO Unknown Option

GOTO DONE

:DONE

ECHO Done!
Run Code Online (Sandbox Code Playgroud)

windows cmd file batch-file

93
推荐指数
6
解决办法
18万
查看次数

如何在启动/调用批处理文件时检查是否定义了参数?

我正在尝试在批处理文件中使用以下验证逻辑,但即使没有为批处理文件提供参数,"使用"块也永远不会执行.

if ("%1"=="") goto usage

@echo This should not execute

@echo Done.
goto :eof

:usage
@echo Usage: %0 <EnvironmentName>
exit 1
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

arguments batch-file

92
推荐指数
4
解决办法
9万
查看次数

检查是否定义了没有命令扩展且没有使用批处理文件的环境变量?

我需要使用cmd.exe命令行(从gyp构建工具调用cmd.exe)来确定是否定义了环境变量.我怎样才能做到这一点?我可以假设变量值不包含单引号或双引号,但不能假设启用了命令扩展.

我尝试了以下内容,它在.bat文件中运行良好,但在命令行上直接输入时失败:

IF "%UNDEFINED%" == "" (echo yes)
Run Code Online (Sandbox Code Playgroud)

当该确切行在.bat文件中并执行时,我将其yes视为输出.当我在命令行上键入它时,输出为空.我在Windows XP SP3上测试这个,虽然我的同事在Windows 7上看到相同的结果.这是http://support.microsoft.com/kb/121170http://www.robvanderwoude.com/建议的方法battech_defined.php.我不想使用,IF DEFINED UNDEFINED (echo yes)因为如果禁用了命令扩展,那将无法使用.

以下帖子中的最高投票回答让我相信这个问题与"CmdLineParser"与"BatchLineParser"中百分比扩展的处理方式有关,但仍然没有让我找到解决方案: 如何Windows命令解释器(CMD.EXE)解析脚本吗?

windows cmd batch-file

37
推荐指数
4
解决办法
6万
查看次数

如何接收最奇怪的命令行参数?

正如在另一个线程中所讨论的如何避免cmd.exe解释shell特殊字符,如<> ^ 从命令行获取所有参数并不容易.

一个简单的

set var=%1
set "var=%~1"
Run Code Online (Sandbox Code Playgroud)

如果你有这样的要求,还不够

myBatch.bat abc"&"^&def
Run Code Online (Sandbox Code Playgroud)

我有一个解决方案,但它需要一个临时文件,它也不是防弹.

@echo off
setlocal DisableDelayedExpansion
set "prompt=X"
(
    @echo on
    for %%a in (4) do (
        rem #%1#
    ) 
) > XY.txt
@echo off
for /F "delims=" %%a in (xy.txt) DO (
  set "param=%%a"
)
setlocal EnableDelayedExpansion
set param=!param:~7,-4!
echo param='!param!'
Run Code Online (Sandbox Code Playgroud)

它失败了像myBatch.bat%a,它显示4而不是%a

在这种情况下,简单的回声%1将起作用.
这显然是for循环,但我不知道如何改变它.
也许存在另一个简单的解决方案

我不需要这个来解决实际问题,但我喜欢在每种情况下都是防弹的解决方案,而不仅仅是在大多数情况下.

escaping batch-file

15
推荐指数
1
解决办法
3598
查看次数

SHIFT 不影响 %*

我正在尝试向批处理文件添加一些可选参数,但遇到了问题,因为该SHIFT命令不影响all-arguments变量%*

有谁知道如果我必须使用,我如何允许可选的批处理文件参数%*

例如,一个简单的示例,它仅将带有和不带有换行符的参数打印到屏幕上,使用可选参数来确定哪个:

@echo off
if (%1)==()   goto usage
if (%1)==(/n) goto noeol
goto eol

:eol
  echo %*
  goto :eof

:noeol
  shift
  call showline %*
  goto :eof

:usage
  echo Prints text to the screen
  echo > %0 [/n] TEXT
  echo /n to NOT print a new-line at the end of the text
  goto :eof
Run Code Online (Sandbox Code Playgroud)

arguments batch-file

3
推荐指数
1
解决办法
1356
查看次数

标签 统计

batch-file ×5

arguments ×2

cmd ×2

windows ×2

escaping ×1

file ×1