相关疑难解决方法(0)

为什么我的set命令导致什么都没有存储?

我稍后尝试访问TOMCAT_VER的值,但它显示为空字符串.

if exist "%_REALPATH%\tomcat-%TOMCAT_VER2%" (
  set CATALINA_HOME=%_REALPATH%\tomcat-%TOMCAT_VER2%
  set TOMCAT_VER=%TOMCAT_VER2%
  echo "%TOMCAT_VER%"
) else if exist "%TOMCAT_VER2%" (
  set CATALINA_HOME="%TOMCAT_VER2%"
  set TOMCAT_VER="%TOMCAT_VER2%"
  echo "%TOMCAT_VER%"
)
Run Code Online (Sandbox Code Playgroud)

为了进一步调试,我在它设置的下方插入了一个echo语句,但它似乎不起作用.在禁用echo off的情况下,我可以看到显示这些变量设置的语句,但我似乎无法将它们打印出来.

windows cmd batch-file delayedvariableexpansion

12
推荐指数
1
解决办法
2万
查看次数

用户在批处理文件中输入默认值

我正在尝试使用默认值提示用户输入批处理文件(如果用户没有输入输入).

我正在尝试如下:需要默认值:1到头.

set rev1=1
set rev2=HEAD
set /p rev1="start rev: default is %rev1% "
set /p rev2="end rev: default is %rev2% "
Run Code Online (Sandbox Code Playgroud)

但是提示显示start rev: default is而不是start rev: default is 1.

请帮忙.

user-input batch-file

6
推荐指数
1
解决办法
6383
查看次数

doskey 命令分隔符产生空行

doskey命令分隔符($T当该命令不产生输出)产生一个空行。

C:\> set "a="                                                    

C:\> set "b="                                                    

C:\> doskey test=set "a=foo" $T set "b=bar" $T echo ^%a^% ^%b^%

C:\> test                                                      

C:\>                                                           
C:\> foo bar                                                   
Run Code Online (Sandbox Code Playgroud)

注意发出后的空行test,这会影响可读性。

有一个众所周知的^?替代方法$T,它不添加空格,但新命令不继承环境变量。

C:\> set "a="                                                    

C:\> set "b="                                                    

C:\> doskey test=set "a=foo" ^& set "b=bar" ^& echo ^%a^% ^%b^%

C:\> test                                                      
%a% %b%     
Run Code Online (Sandbox Code Playgroud)

这里没有空格,反正set启动新命令后无效。

如何去除空行?

更新: 删除了“创建一个单独的进程”行,因为它是错误的。

macros alias cmd command-line-interface doskey

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

Windows批处理如果 - 否则无效

[接收整数作为输入的简单程序,如果该数字是微不足道则打印]

当我运行这个我得到一个错误"(此时出乎意料)

@echo off
set /a i=2
set /p input="enter an integer: "
set /a n=input
set /a t=n/2

:loop1      
    if %t% LSS %i% (
        goto trivial
    ) else (
        set /a t0=n%i
        if %t0%==0 (
            goto notTrivial
        ) else (
            set /a i=i+1
            goto loop1
        )
    )
:trivial
    echo %n% is trivial
    goto endd
:notTrivial
    echo %n% is not trivial
:endd
pause > nul
Run Code Online (Sandbox Code Playgroud)

但是当我在loop1中删除else语句时(这是不必要的(因为if if中的goto命令))它可以工作

:loop1      
    if %t% LSS %i% (
        goto trivial
    ) 
        set /a t0=n%i
        if …
Run Code Online (Sandbox Code Playgroud)

windows cmd if-statement batch-file

0
推荐指数
1
解决办法
1005
查看次数