我有一个小批量脚本:
@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"
为什么字符串替换不起作用?
答案 0 :(得分:2)
你的正常和延迟扩张已经逆转。
正常%
扩展在行解析的早期发生,并且在结束时发生延迟的!
扩展。为了使查找/替换起作用,必须在查找/替换操作之前扩展查找字符串。所以你想要
echo "Output: !BINARY_FILES:%FILETOCHECK%=!%"
答案 1 :(得分:0)
您正在使用延迟扩展,但未启用它。将其添加为第一行:
setlocal enabledelayedexpansion