标签: delayedvariableexpansion

Windows批处理SET内部IF无法正常工作

当我运行此脚本时(来自.bat文件):

set var1=true
if "%var1%"=="true" (
  set var2=myvalue
  echo %var2%
)
Run Code Online (Sandbox Code Playgroud)

我总是得到:

ECHO is on.
Run Code Online (Sandbox Code Playgroud)

意思是var2变量没有真正设置.谁能帮助我理解为什么?

windows cmd batch-file delayedvariableexpansion

87
推荐指数
2
解决办法
6万
查看次数

cmd.exe(批处理)脚本中的数组,链接列表和其他数据结构

我正在玩cmd.exe,但在它的帮助下我没有找到任何信息,如何定义数组.

我发现,如何定义简单变量:

set a=10
echo %a%
Run Code Online (Sandbox Code Playgroud)

但是,我想创建数组,链表等...

那么,它能否在cmd.exe中使用(我的意思是:cmd.exe中是否存在任何数组关键字?)

我想实现一些算法:

  • 泡泡排序
  • 快速排序
  • 侏儒排序

等等...

所以,我也想知道,Cmd.exe是否有引用或实例,结构等?

导致其帮助不完整:/?

可以通过图灵机定义将Cmd.exe定义为完整吗?(图灵完成)

windows arrays cmd batch-file delayedvariableexpansion

58
推荐指数
5
解决办法
8万
查看次数

批处理文件中延迟扩展的示例

有人可以给我一个例子,说明批处理脚本在有或没有延迟扩展的情况下会有不同的行为吗?您是否有任何不希望使用延迟扩展的情况?谢谢.

cmd batch-file delayedvariableexpansion

43
推荐指数
3
解决办法
4万
查看次数

变量的行为不符合预期

我一直在努力尝试在这个批处理文件中获得正确的语法,我无法弄清楚为什么有些东西不起作用.

  1. i每次执行此变量时,变量都不会增加.
  2. 连接strc似乎没有连接.

这是我的代码:

set i=0
set "strc=concat:"

for %%f in (*.mp4) do (
    set /a i+=1
    set "str=intermediate%i%.ts"

    set strc="%strc% %str%|"

    ffmpeg -i "%%f" -c copy -bsf:v h264_mp4toannexb -f mpegts "%str%"
)

set strc="%strc:-1%"
ffmpeg -i "%strc%" -c copy -bsf:a aac_adtstoasc Output.mp4
Run Code Online (Sandbox Code Playgroud)

batch-file delayedvariableexpansion

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

为什么我的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万
查看次数

为什么我不能在if语句中获得延迟扩展变量的子字符串?

为什么字符串操作在if语句中内联工作而不使用延迟扩展变量 - 否则失败.例如:

set test=testString
if %test:~0,4%==test echo Success
Run Code Online (Sandbox Code Playgroud)

这工作正常; 回来Success.但是,如果我执行以下操作:

setLocal enableDelayedExpansion
set test=testString
if !test:~0,4!==test echo Success
Run Code Online (Sandbox Code Playgroud)

我收到错误 - 4!==test was unexpected at this time.

显然你可以通过在if语句中set comp=!test:~0,4!使用!comp!变量来做到这一点.

cmd if-statement batch-file delayedvariableexpansion

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

为什么setlocal会干扰windows批处理文件中的chdir?

如果我运行批处理文件

setlocal
chdir ..
Run Code Online (Sandbox Code Playgroud)

目录未更改,但如果我运行

setlocal
endlocal 
chdir ..
Run Code Online (Sandbox Code Playgroud)

它正常工作.这必须与setlocal完全一致.但是,当您阅读setlocal的定义时,并不完全明显,这与环境变量的显示方式有关.我希望这是一个很好的机会来解释setlocal实际上做了什么以及为什么它干扰了chdir.

batch-file delayedvariableexpansion chdir

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

批处理脚本 - 设置/定义环境变量(如果尚未设置/定义)

我需要一个批处理脚本来调用

SetEnvironmentVariableIfNotSet.bat environment_variable_name <value>
Run Code Online (Sandbox Code Playgroud)

从另一个脚本或命令行。

我绝不是 Windows 批处理脚本方面的专家,但通过反复试验并将不同的东西拼凑在一起,到目前为止我已经想出了这个:

@setlocal EnableDelayedExpansion
@if "!%1!"=="" (
  echo '%1' undefined. Defining with value
  echo    %2
  endlocal DisableDelayedExpansion
  goto :define_variable
) else (
  echo '%1' already defined with value
  echo    !%1!
  endlocal DisableDelayedExpansion
  goto :eof
)

:define_variable
@set "%1=%2"
Run Code Online (Sandbox Code Playgroud)

当被调用时,做我需要的事情:

C:\>call DefEnvVarIfNotDef.bat ASD "C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\devenv.exe"
'ASD' undefined. Defining with value
   "C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\devenv.exe"
C:\>echo %ASD%
"C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\devenv.exe"
Run Code Online (Sandbox Code Playgroud)

在这里寻求更好/最佳的解决方案。这对我来说确实很难看。

windows cmd batch-file delayedvariableexpansion

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

批处理:从SETLOCAL EnableDelayedExpansion返回值

我想知道为什么这段代码不能按预期工作:

@ECHO off
SET S1=HELLO

SETLOCAL EnableDelayedExpansion
SET S2=!S1! WORLD^^!
ECHO !S2!
ENDLOCAL & SET S1=!S2!

ECHO %S1%
PAUSE
Run Code Online (Sandbox Code Playgroud)

输出:

HELLO WORLD!
!S2!
Run Code Online (Sandbox Code Playgroud)

预期产量:

HELLO WORLD!
HELLO WORLD!
Run Code Online (Sandbox Code Playgroud)

谢谢.

string shell console batch-file delayedvariableexpansion

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

.bat 文件中嵌套 if 中的 %errorlevel% 值错误

我已经编写了一个.bat文件来首先运行一个程序,如果它正确完成,我运行另一个程序并检查它的返回值。

first-program.exe
IF "%ERRORLEVEL%"=="0" (
    second-program.exe
    IF "%ERRORLEVEL%"=="0" (
        ECHO OK
    ) ELSE (
        ECHO NOK
    )
)
Run Code Online (Sandbox Code Playgroud)

但是,第二个%ERRORLEVEL%始终等于第一个,它不会设置为 的返回值second-program.exe

cmd batch-file errorlevel delayedvariableexpansion

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