标签: delayedvariableexpansion

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

Cmd和感叹号 - 第二部分

我真的想知道为什么我的字符串替换过程在解析包含任何特殊字符(包括感叹号)的文本文件时有效.我预计延迟变量扩展会关闭&符号,百分号等的特殊含义,但会因感叹号而失败...

码:

@echo on & setlocal ENABLEEXTENSIONS

set "InFile=%~1"
set "OutFile=%~2"
set "Replace=%~3"

CALL :ParseCue "%%InFile%%" "%%OutFile%%" "%%Replace%%"

endlocal &GOTO:EOF

:ParseCue
@echo on & setlocal ENABLEEXTENSIONS DISABLEDELAYEDEXPANSION
set "FileToParse=%~1"
set "OutputFile=%~2"
set "NewExtension=%~3"
for /F "usebackq tokens=* delims=" %%a in ("%FileToParse%") DO (
  set "line=%%a"
  @echo on & setlocal ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION
  set "line=!line:.wav=%NewExtension%!"
  echo(!line!>>"%OutputFile%"
  endlocal
)
endlocal &GOTO:EOF
Run Code Online (Sandbox Code Playgroud)

InputFile.txt:

This a test for parsing lines with special characters
Rock & Roll.wav
Rock & Roll!.wav
Special | < > ~ \ …
Run Code Online (Sandbox Code Playgroud)

windows cmd batch-file delayedvariableexpansion

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

Windows批处理文件 - ENABLEDELAYEDEXPANSION查询

阅读了stackoverflow上的现有帖子,并在网上做了一些阅读.在我丢失太多头发之前,我认为是时候发帖了!

我在批处理文件中有以下代码,我在Windows XP SP3下双击运行:

SETLOCAL ENABLEDELAYEDEXPANSION

::Observe variable is not defined
SET test

::Define initial value
SET test = "Two"

::Observe initial value is set
SET test

::Verify if the contents of the variable matches our condition
If "!test!" == "Two" GOTO TWO

::First Place holder
:ONE

::Echo first response
ECHO "One"

::Second Place holder
:TWO

::Echo second response
ECHO "Two"

::Await user input
PAUSE

ENDLOCAL
Run Code Online (Sandbox Code Playgroud)

基本上我试图确定我是否可以使用条件导航我的脚本.很明显,我在变量范围和延迟变量扩展方面遇到了一些问题,但我对自己做错了有点遗憾.

谁能指出我正确的方向?

batch-file delayedvariableexpansion

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

批量延迟扩展不起作用

好吧,我变得疯狂,我不知道还能做什么,我已经尝试了几件事,但没有任何工作.

看看这个示例代码(test.cmd):

setlocal enabledelayedexpansion enableextensions
set VAR=before
if "%VAR%" == "before" (
    set VAR=after;
    if "%VAR%" == "after" @echo If you see this, it worked
)
Run Code Online (Sandbox Code Playgroud)

这是生成的输出:

D:\>ver

Microsoft Windows [Version 6.1.7600]

D:\>test.cmd

D:\>setlocal enabledelayedexpansion enableextensions

D:\>set VAR=before

D:\>if "before" == "before" (
set VAR=after;
 if "before" == "after"
)

D:\>
Run Code Online (Sandbox Code Playgroud)

难道我做错了什么?

这只是一个测试,我需要的代码也使用变量并且需要延迟扩展,但是这个简单的测试不起作用,另一个也不会工作(我试过,我最后得到一个简单的例子来测试它是否有效).

编辑:新代码和输出:

TEST.CMD:

@echo off
setlocal enabledelayedexpansion enableextensions
set VAR=before
if "%VAR%" == "before" (
   set VAR=after;
   if "!VAR!" == "after" (
      echo It worked.
   ) else ( …
Run Code Online (Sandbox Code Playgroud)

windows batch-file delayedvariableexpansion

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

如何在 cmd /c 中设置 %ERRORLEVEL%?

我希望能够在PowerShell中运行的命令提示符脚本(即)的开头将%ERRORLEVEL%环境变量(也称为“系统变量”)设置为任意值。每当人们想要设置(1)时,他们都会执行以下操作:cmd /c%ERRORLEVEL%

cmd /c "exit /b 3"
cmd /c "echo %ERRORLEVEL%" 
Run Code Online (Sandbox Code Playgroud)

但是,尽管在正常命令提示符中运行上述命令时%ERRORLEVEL%设置为3,但如果在 PowerShell 中执行这些确切的行,则退出代码环境变量不会设置3并保持为0。此外,您不能执行以下操作:

cmd /v:on /c "exit /b 3 & echo !ERRORLEVEL!"
Run Code Online (Sandbox Code Playgroud)

exit命令完全脱离命令执行(即),并且在运行cmd /c后没有其他命令。&

因此,我尝试在PowerShell中执行以下命令:

cmd /v:on /c "SET %ERRORLEVEL% = 4 & echo !ERRORLEVEL!"
Run Code Online (Sandbox Code Playgroud)

预期输出是4,但这总是输出0。我不明白为什么我无法使用SET环境%ERRORLEVEL%变量。我已经使用了延迟命令执行(示例在这里),但这里似乎没有任何摆弄。

有谁知道为什么该命令SET %ERRORLEVEL% = …

powershell cmd exit-code errorlevel delayedvariableexpansion

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

如何将%%参数分配给变量?

如何将%%参数分配给变量?

FOR /F "tokens=1 delims= " %%A IN (connections.txt) DO (
   set USER=%%A

   echo A=%%A
   echo USER=%USER%
)
Run Code Online (Sandbox Code Playgroud)

输出此代码:

A=user1
USER=
Run Code Online (Sandbox Code Playgroud)

如何将参数%% A分配给变量USER?

batch-file delayedvariableexpansion

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

cmd和感叹号

对于包含感叹号的文件夹名称,以下代码失败.我想我需要启用DelayedExpansion来处理嵌套的for循环.任何想法让这项工作?谢谢!

@echo off & setlocal ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION

set "dest=%~dpn1"
IF "%1" equ "" Set "dest=%cd%"

set /a Folders=0
set /a FoldersWithSubFoldersAndFiles=0
set /a FoldersWithOnlyFiles=0
set /a FoldersWithOnlySubFolders=0
set /a FoldersEmpty=0

for /f "usebackq tokens=*" %%a in (`DIR /AD /S /B "%dest%"`) do (
    Set /a Folders+=1
    for /f "usebackq tokens=*" %%i in (`DIR "%%a" /A-D /B 2^>NUL^| FIND /C /V ""`) do (
        Set NumberOfFiles=%%i
    )
    for /f "usebackq tokens=*" %%i in (`DIR "%%a" /AD /B 2^>NUL^| FIND /C /V …
Run Code Online (Sandbox Code Playgroud)

windows cmd batch-file delayedvariableexpansion

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