我想运行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,这个变量的读取应该被延迟直到执行该行。