【发布时间】:2016-02-29 22:16:44
【问题描述】:
我有一个小批量脚本:
@echo off
cls
setlocal enabledelayedexpansion
SET BINARY_FILES=find_files.cmd;find_files2.cmd
pushd "%cd%"
call :listFiles
popd
goto :eof
:listFiles
for /R "%cd%" %%i in ( *.cmd ) do (
set "filen=%%~nxi"
rem give me only the filename
call :checkIfIsList !filen!
)
goto :eof
:checkIfIsList
set "FILETOCHECK=%1"
echo "FILETOCHECK: !FILETOCHECK!"
echo "Output: %BINARY_FILES:!FILETOCHECK!=%"
goto :eof
这个脚本的输出是这样的:
"FILETOCHECK: findstring.cmd"
"Output: find_files.cmd;find_files2.cmd"
"FILETOCHECK: find_files.cmd"
"Output: find_files.cmd;find_files2.cmd"
"FILETOCHECK: find_files2.cmd"
"Output: find_files.cmd;find_files2.cmd"
"FILETOCHECK: first.cmd"
"Output: find_files.cmd;find_files2.cmd"
问题是:我想要,以“输出:...”开头的第二行只有这个输出
"Output: ;find_files2.cmd"
为什么字符串替换不起作用?
【问题讨论】:
-
这个管理在this answer有充分的解释:“要解决这个问题你必须使用延迟扩展,即在开头插入
setlocal EnableDelayedExpansion命令,用百分比括起来替换变量,然后将感叹号中的原始变量:echo "Output: !BINARY_FILES:%FILETOCHECK%=!"
标签: windows batch-file