문제

i want to run git pull in a path for all projects, so i wrote a bat file.

@echo off
setlocal enabledelayedexpansion
set dir=%1
if "%dir%"=="" (
    set dir=%~dp0
)
for /D /R "%dir%" %%i in (*) do (
    if exist %%i\.git (
        cd /d %%i
        rem no effect
        echo %cd%
        rem git pull
    )
)
pause

but is seems that cd in for loop does not take any effect, i don't know why. can someone help me solve this problem?enter code here

도움이 되었습니까?

해결책

It has effect. But, in batch files, when a block of code (the code enclosed in parenthesis) is reached (the same for a line out of a block), variable reads are replaced with the value of the variable before executing the code in the block. So, when your for command is reached, the read of the %cd% variable is replaced with the value of the %cd% variable before executing the code. This speeds and simplifies execution of the code but generate this kind of problems.

You can enable delayed expansion with setlocal enabledelayedexpansion command, and change the sintax from %cd% to !cd!. This tells cmd that that this variable read should be delayed until execution of the line.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top