在windows .bat文件中使用cd没有任何作用

我想运行git拉所有项目的path,所以我写了一个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循环不起任何作用,我不知道为什么。 有人可以帮我解决这个问题吗? enter code here

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

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