gpt4 book ai didi

cmd - 如何将当前目录包装在 CMD 中的字符串中?

转载 作者:行者123 更新时间:2023-12-04 21:11:38 29 4
gpt4 key购买 nike

我需要编写一个命令来更改当前目录并打印包含在一些标签中的 NEW 目录。我以为 cd SOMEPATH & echo wkd%cd%wkd会这样做,但有一个问题。

这是一些示例输入和输出

C:\Users> cd .. & echo wkd%cd%wkd
wkdC:\Userswkd

如您所见,OLD 目录已打印。为什么会这样?
我也尝试使用换行符(因为我通过外部程序输入命令)但是在启动命令行软件时会出现问题。

我真的希望有一个解决方案。

最佳答案

在批处理文件中,代码行或代码块(括号中的代码)首先被解析,然后执行,并在下一行/ block 上重复该过程。在解析阶段,所有从变量中获取值的读取操作都从代码中删除,在开始执行代码之前替换为变量中的值。

在您的情况下,当解析行时 %cd%在开始执行该行并更改文件夹之前,将其替换为其值。

备择方案:

  • 如果将命令分成两行,您将检索到正确的值。

  • 光盘..
    回显 wkd%cd%wkd
  • 您可以启用延迟扩展并更改用于从 %var% 检索变量的语法。至!var!告诉解析器读操作应该延迟到执行时间

  • rem 在批处理文件中
    setlocal enabledelayedexpansion
    cd .. & echo wkd!cd!wkd

    来自命令行的 rem
    cmd/v:on/q/c "cd .. & echo wkd!cd!wkd"
  • 您可以将百分号转义到解析器看不到变量并在 echo 之前强制重新评估命令。得到正确的值。您可以使用 call命令。它有效,但是 call比其他选项慢

  • rem 在批处理文件中
    cd .. & 调用 echo wkd%%cd%%wkd

    来自命令行的 rem
    cd .. & 调用 echo wkd^%cd^%wkd
  • 您可以执行检索所需信息的命令,而不是读取变量

  • 来自命令行的 rem
    cd .. & for %A in (.) do echo wkd%~fAwkd
    cd .. & for/f %A in ('cd') do echo wkd%Awkd

    rem 在批处理文件中,百分号需要转义
    cd .. & for %%A in (.) do echo wkd%%~fAwkd
    cd .. & for/f %%A in ('cd') do echo wkd%%Awkd

    ( %~fAfor 可替换参数 %A 引用的元素的全名)
    for /f 的方式有所不同和 for先前代码中的命令有效
  • for /f正在启动 cmd将执行 cd 的实例命令输出当前目录,输出由do中的代码处理为每个输出行调用的子句,该行存储在可替换参数
  • for没有修饰符直接检索对指定元素的引用,在本例中为 . , 当前文件夹。在这种情况下 %~fA用于从关系.中获取真实的全名引用绝对路径

  • 所有这些选项都只做一件事:将当前文件夹的检索延迟到 cd ..已被执行。

    关于cmd - 如何将当前目录包装在 CMD 中的字符串中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27072298/

    29 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com