我想在所有项目的路径中运行 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 in for loop没有任何效果,我不知道为什么。
有人可以帮我解决这个问题吗?在此处输入代码
最佳答案
有效果。但是,在批处理文件中,当到达一个代码块(括号中的代码)时(对于 block 中的一行也是如此),在执行 block 中的代码之前,变量读取将替换为变量的值。因此,当到达您的 for
命令时,%cd%
变量的读取将替换为 %cd%
变量的值 < strong>在 执行代码之前。这加快并简化了代码的执行,但会产生此类问题。
您可以使用 setlocal enabledelayedexpansion
命令启用延迟扩展,并将语法从 %cd%
更改为 !cd!
。这告诉 cmd 这个变量读取应该延迟到该行的执行。
关于windows - 在 Windows .bat 文件中使用 cd 没有效果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21178772/