Windows 如何使用%or!批处理脚本
我这样写剧本:Windows 如何使用%or!批处理脚本,windows,batch-file,cmd,Windows,Batch File,Cmd,我这样写剧本: @ECHO OFF setlocal EnableDelayedExpansion set "remove=ABC" echo. %remove% Set FILENAME="456_789_ABC00011092_789_EFGHIK_56893.mpg" for %%a in (%FILENAME:_=" "%) do ( set TEN=%%a echo. %AB% set "remove_1=ABC" echo. %remove_1%
@ECHO OFF
setlocal EnableDelayedExpansion
set "remove=ABC"
echo. %remove%
Set FILENAME="456_789_ABC00011092_789_EFGHIK_56893.mpg"
for %%a in (%FILENAME:_=" "%) do (
set TEN=%%a
echo. %AB%
set "remove_1=ABC"
echo. %remove_1%
Set _TEN=!TEN:%remove%=!
echo. %_TEN%
Set i=0
IF !_TEN! NEQ !TEN! (
set /A i+=1
set "String[!i!]=%%~a"
)
)
pause
exit
for %%a in (%FILENAME:_=" "%) do (
echo %%a | findstr /I /R /C:"ABC" >nul
ECHO %errorlevel%
if "%errorlevel%" equ "0" (
set /A i+=1
set "String[!i!]=%%~a"
)
)
为什么echo.%AB%
echo.%删除1%
结果为
我将%
替换为代码>。工作正常,但命令Set\u TEN=!十:!移除_1!=代码>不运行
编辑-(来自当前作为答案发布的附加问题)
当我像这样使用FindStr命令时:
@ECHO OFF
setlocal EnableDelayedExpansion
set "remove=ABC"
echo. %remove%
Set FILENAME="456_789_ABC00011092_789_EFGHIK_56893.mpg"
for %%a in (%FILENAME:_=" "%) do (
set TEN=%%a
echo. %AB%
set "remove_1=ABC"
echo. %remove_1%
Set _TEN=!TEN:%remove%=!
echo. %_TEN%
Set i=0
IF !_TEN! NEQ !TEN! (
set /A i+=1
set "String[!i!]=%%~a"
)
)
pause
exit
for %%a in (%FILENAME:_=" "%) do (
echo %%a | findstr /I /R /C:"ABC" >nul
ECHO %errorlevel%
if "%errorlevel%" equ "0" (
set /A i+=1
set "String[!i!]=%%~a"
)
)
为什么errorlevel
always=0
未在您发布的脚本中定义,因此它没有任何值将不会被echo
编辑,因为echo
之后的
将只得到一个空行。因为remove_1
是在循环(代码块)中设置的,所以应该使用延迟扩展语法Echo!移除_1代码>。这与echo相同_10%
,即回音_十个代码>,并且应该是Echo!AB代码>以前已经定义过。为了获得设置变量所需的双重扩展,可以使用伪调用:
@Echo关闭
SetLocal EnableDelayedExpansion
设置“文件名=456_789_ABC00011092_789_EFGHIK_56893.mpg”
对于中的%%A(“%FILENAME:\=”“%”),请执行以下操作(
设置“十=%%A”
回声!AB!
设置“删除\u 1=ABC”
回声!移除1!
调用集“\u TEN=!TEN:%%删除\u 1%%=!”
回声!
设置“i=0”
如果“!\u十!”NEq“!十!”(
设置/A i+=1
设置“字符串[!i!]=%%~A”
)
)
暂停
退出/B
在第二个相关问题中,最初作为答案发布,现在作为原始问题的编辑添加;因为错误级别是在循环(代码块)中设置的,所以应该使用延迟扩展语法,!错误等级代码>
@Echo关闭
SetLocal EnableDelayedExpansion
设置“文件名=456_789_ABC00011092_789_EFGHIK_56893.mpg”
对于中的%%A(“%FILENAME:\=”“%”),请执行以下操作(
Echo%%A | FindStr/IRC:“ABC”>Nul
回声!错误等级!
如果“!errorlevel!”==“0”(
设置/A i+=1
设置“字符串[!i!]=%%~A”
)
)
设置字符串[
暂停
退出/B
或者,如果不需要将每个错误级别回显到屏幕上,可以使用条件语句&&
:
@Echo关闭
SetLocal EnableDelayedExpansion
设置“文件名=456_789_ABC00011092_789_EFGHIK_56893.mpg”
对于中的%%A(“%FILENAME:\=”“%”),请执行以下操作(
Echo%%A|FindStr/IRC:“ABC”>Nul&&(
设置/A i+=1
设置“字符串[!i!]=%%~A”
)
)
设置字符串[
暂停
退出/B
%AB%
未在您发布的脚本中定义,因此它没有值将不会被echo
编辑,因为echo
之后的
,您只会得到一个空行。因为remove\u 1
是在循环中设置的,(代码块),您应该使用延迟扩展语法,Echo!remove_1!
。这与Echo.%\u TEN%
相同,即Echo!\u TEN!
。谢谢。现在,我了解了如何在循环中使用变量。我应该使用哪个脚本?