在Windows中使用cd .bat文件无效

时间:2014-01-17 05:48:24

标签: windows git batch-file for-loop cd

我想在所有项目的路径中运行git pull,所以我写了一个bat文件。

@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

但似乎cd for for循环没有任何效果,我不知道为什么。 有人可以帮我解决这个问题吗?enter code here

1 个答案:

答案 0 :(得分:3)

它有效果。但是,在批处理文件中,当到达代码块(括号中的代码)时(对于块中的一行,相同),在执行块中的代码之前,变量读取将替换为变量的值。因此,当达到for命令时,%cd%变量的读取将替换为执行代码之前%cd%变量的值。这加快并简化了代码的执行,但却产生了这类问题。

您可以使用setlocal enabledelayedexpansion命令启用延迟扩展,并将sintax从%cd%更改为!cd!。这告诉cmd该变量读取应该延迟到执行该行。