У меня есть структура папок, которая похожа, например, на C: \ Temp \, там много папок и файлов, и внутри каждой папки есть «callme.bat». Я хотел бы создать так называемый main.bat, который один за другим вызывает файлы callme в главном окне. Но есть проблема, в файлах callme есть некоторое эхо, которое содержит "!" отметьте, что создает для меня проблему.
Я понял проблему с комбо setlocal-endlocal, потому что пакетный скрипт хочет интерпретировать сообщение внутри "!" метки, поэтому я должен использовать endlocal, но если я это сделал, я не смог запустить летучие мыши callme.
callme.bat
@echo off
echo !!! hidden message !!! not hidden message
pause
main.bat вариант 1
@echo off
setlocal enabledelayedexpansion
set PATH=C:\Temp
for /F %%x in ('dir /B/A:D %PATH%') do (
set CURR_DIR=%PATH%\%%x
set ACTUAL_BATCH=!CURR_DIR!\callme.bat
echo !ACTUAL_BATCH!
call !ACTUAL_BATCH!
pause
)
pause
exit
main.bat вариант 2
@echo off
set PATH=C:\Temp
for /F %%x in ('dir /B/A:D %PATH%') do (
setlocal enabledelayedexpansion
set CURR_DIR=%PATH%\%%x
set ACTUAL_BATCH=!CURR_DIR!\callme.bat
echo !ACTUAL_BATCH!
ENDLOCAL & SET VAR=!ACTUAL_BATCH!
echo %VAR%
pause
)
pause
exit
main.bat вариант 3
@echo off
set PATH=C:\Temp
for /F %%x in ('dir /B/A:D %PATH%') do (
setlocal enabledelayedexpansion
set CURR_DIR=%PATH%\%%x
set ACTUAL_BATCH=!CURR_DIR!\callme.bat
echo !ACTUAL_BATCH!
REM source: /3390967/zastavte-peremennuy-okruzheniya-vyzhit-endlocal
for /f "delims=" %%A in (""!ACTUAL_BATCH!"") do endlocal & set "VAR=%%~A"
echo %VAR%
call %VAR%
pause
)
pause
exit
Так что я не знаю, что делать. У кого-нибудь есть идея?
выход варианта 1:
C:\Temp\1\callme.bat
not hidden message
C:\Temp\2\callme.bat
not hidden message
выход варианта 2-3:
C:\Temp\1\callme.bat
ECHO is off.
C:\Temp\2\callme.bat
ECHO is off.