windows - 在 Windows .bat 文件中使用 cd 没有效果

标签 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 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/

相关文章:

node.js - Npm:无法调用未定义的方法 'charAt'

git - 使用 .gitignore 忽略子目录中的特定文件

batch-file - 如何解析批处理文件中 for 循环中的一行文本并将各个字符串存储在数组中?

windows - 使用 New-PsDrive 时 Powershell 作业卡住

c++ - 在 Windows 上使用 cmake 编译 gstreamer 应用程序

windows - 构建时命令复制退出并显示代码 4 - Visual Studio 重新启动解决了该问题

javascript - 下载速度下降时在 Windows 中终止进程

c++ - Windows 的 timespec 等价物

c++ - 在cmake项目中构建libgit2

linux - 如何使用批处理脚本或linux cmmand将特定扩展文件从目录和子目录复制到其他目录