基本上我正在尝试!var1:SomeText =!var2 !! 但是这段代码不起作用.我错过了什么?
variables substring batch-file delayedvariableexpansion windows-scripting
我真的想知道为什么我的字符串替换过程在解析包含任何特殊字符(包括感叹号)的文本文件时有效.我预计延迟变量扩展会关闭&符号,百分号等的特殊含义,但会因感叹号而失败...
码:
@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) 阅读了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)
基本上我试图确定我是否可以使用条件导航我的脚本.很明显,我在变量范围和延迟变量扩展方面遇到了一些问题,但我对自己做错了有点遗憾.
谁能指出我正确的方向?
好吧,我变得疯狂,我不知道还能做什么,我已经尝试了几件事,但没有任何工作.
看看这个示例代码(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) 我希望能够在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
如何将%%参数分配给变量?
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?
对于包含感叹号的文件夹名称,以下代码失败.我想我需要启用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) batch-file ×6
cmd ×3
windows ×3
errorlevel ×1
exit-code ×1
powershell ×1
substring ×1
variables ×1