簡體   English   中英

設置或在Windows dos cmd的for循環內工作

[英]set nor working inside a for loop for windows dos cmd

我有一個腳本,可以搜索某些目錄並為給定目錄設置路徑列表,現在我想從中排除一些經常出現的不需要的目錄。

這是劇本

@ECHO off

setlocal enableextensions
:start
set scriptname=%0%
set PAUSE_ON_ERROR=yes

rem #
rem ######   SECTION TO CUSTOMIZE   #####
rem #

rem #
rem # This is the list of directories where instances of TECSYS iTopia installed under 
rem # JBoss are located.
rem #

set jboss_dir_list=C: C:\TecsysDev\iTopiaControlPanel\trunk

rem #
rem ######   END SECTION TO CUSTOMIZE   #####
rem #

set argNb=0
for %%x in (%*) do Set /A argNb+=1
if %argNb% GTR 1 (
    goto :showUsage
) else if %argNb% == 0 (
    set ENV_NAME=*
) else (
    set ENV_NAME=*%~1*
)


:MainBlock
set scriptname=%0%
cd /d %~dp0
for /f "usebackq delims=" %%D in (`cd`) do set scriptdir=%%D

for /f "usebackq delims=" %%D in (`cd`) do set CURRENT_DIR=%%D
cd "%scriptdir%"
for /f "usebackq delims=" %%D in (`cd`) do set JBOSS_DIR=%%D
set JBOSS_DIR=%JBOSS_DIR%\..\..\..\..\..
cd "%JBOSS_DIR%"
for /f "usebackq delims=" %%D in (`cd`) do set JBOSS_DIR=%%D
cd "%CURRENT_DIR%"

rem Make sure that we have the findstr utility installed.

set findstr_found=
for /f "usebackq" %%f in (`echo x ^| findstr x 2^>nul`) do set findstr_found=%%f
if "X%findstr_found%" == "X" (
   echo The findstr utility is not found.
   goto pauseforError
)

call :getJbossVersion

rem prepare the list of special JBoss environments to exclude

if /i "%JBOSS_VERSION%" lss "5" (
    set env_to_exclude=all default minimal
) else if /i "%JBOSS_VERSION%" lss "6" (
    set env_to_exclude=all default minimal standard web
) else (
    set env_to_exclude=all default minimal jbossweb-standalone standard
)

rem find the environment directories
setlocal enabledelayedexpansion
Set Count=1
for  %%f in (%jboss_dir_list%) do ( 
    for /f "delims=" %%G in ('dir /b /ad "%%~f\jboss*"') do (
        if exist "%%f\%%G\server\%ENV_NAME%" (
            for /f "delims=" %%H in ('dir /b /ad "%%~f\%%~G\server\%ENV_NAME%"') do (
                echo count est !count!
                call :concat %%~f\%%~G\server\%%~H
                Set /A Count+=1
            )
        )
    )
)


rem echo %ENV_NAME%
rem  %jboss_home_list%

:concat

echo the environment is %1
set is_env_to_exclude=no

for  %%L in (%env_to_exclude%) do (
set is_env_to_exclude=no
    for /f "usebackq delims=" %%U in (`echo %1 ^| findstr %%L`) do (
        set is_env_to_exclude=yes               
        echo flag du Ellouze
    )
)
echo %is_env_to_exclude%

rem echo %is_env_to_exclude%
rem set jboss_home_list=%1 %jboss_home_list%
goto :eof

:getJbossVersion

for /f "usebackq tokens=2" %%v in (`echo. ^| %JBOSS_DIR%\bin\run.bat -V ^| ^ 
                                   findstr "JBoss" ^| findstr /i /v "BootStrap"`) do (
   set JBOSS_VERSION=%%v
)

goto :EOF

:showUsage

echo Usage:  tish [environment]
   echo                  ^|
   echo                  +--- installed environment


rem SET /P uname=Please enter your name: 
rem IF "%uname%"=="" GOTO Error
rem ECHO Hello %uname%, Welcome to DOS inputs!
rem GOTO End
rem :Error
rem ECHO You did not enter your name! Bye bye!!

:pauseforError
if "%PAUSE_ON_ERROR%" == "yes" pause
:End

我的想法是通過:concat子例程進行文件處理,問題是設置為is_env_to_exclude = yes for循環內的插入不起作用,當我執行腳本時,echo標志正在顯示,但集合is_env_to_exclude始終設置為no。

我認為您需要打破循環:

echo the environment is %1
set is_env_to_exclude=no

for  %%L in (%env_to_exclude%) do (
set is_env_to_exclude=no
    for /f "usebackq delims=" %%U in (`echo %1 ^| findstr %%L`) do (
        set is_env_to_exclude=yes               
        echo flag du Ellouze
        goto :break_loop
    )
)
:break_loop
echo %is_env_to_exclude%

%env_to_exclude%項的每次迭代%env_to_exclude% ,is_env_to_exclude設置為no。 雖然代碼對我來說有點復雜:)

這實際上取決於env_to_exclude的內容。

每個%%L is_env_to_exclude都將設置為no,因此即使將其設置為yes ,如果在設置之后還有更多要處理的元素,則將其is_env_to_exclude為no。

set is_env_to_exclude=no

在循環中似乎是罪魁禍首; 刪除它似乎可以解決問題。

AAMOI, if [not] defined flag ,則set "flag="set flag=Y允許if [not] defined flag它具有附加的優點,即該標志的當前狀態在FOR循環中可用,而無需enabledelayedexpansion

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM