我想在所有项目的路径中运行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
答案 0 :(得分:3)
它有效果。但是,在批处理文件中,当到达代码块(括号中的代码)时(对于块中的一行,相同),在执行块中的代码之前,变量读取将替换为变量的值。因此,当达到for
命令时,%cd%
变量的读取将替换为执行代码之前%cd%
变量的值。这加快并简化了代码的执行,但却产生了这类问题。
您可以使用setlocal enabledelayedexpansion
命令启用延迟扩展,并将sintax从%cd%
更改为!cd!
。这告诉cmd该变量读取应该延迟到执行该行。