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

时间:2014-11-21 23:48:44

标签: cmd echo cd

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

以下是一些示例输入和输出

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

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

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

2 个答案:

答案 0 :(得分:1)

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

在您的情况下,当解析行时,{C}替换为其值,然后再开始执行该行并更改文件夹。

备选方案:

  • 如果将命令分成两行,则会检索到正确的值。
    cd ..  
    echo wkd%cd%wkd
  • 您可以启用延迟扩展并将用于检索变量的语法从%cd%更改为%var%,告诉解析器读取操作应延迟到执行时间
    rem inside a batch file
    setlocal enabledelayedexpansion
    cd .. & echo wkd!cd!wkd

    rem from a command line
    cmd /v:on /q /c "cd .. & echo wkd!cd!wkd"
  • 您可以将百分号转义为解析器,但不会看到变量,并在!var!之前强制执行命令重新评估以获取正确的值。您可以使用echo命令执行此操作。它有效,但call比其他选项慢
    rem inside a batch file
    cd .. & call echo wkd%%cd%%wkd

    rem from command line
    cd .. & call echo wkd^%cd^%wkd
  • 您可以执行检索所需信息的命令
  • ,而不是读取变量
    rem from command line
    cd .. & for %A in (.) do echo wkd%~fAwkd
    cd .. & for /f %A in ('cd') do echo wkd%Awkd

    rem in batch files the percent sign needs to be escaped
    cd .. & for %%A in (.) do echo wkd%%~fAwkd
    cd .. & for /f %%A in ('cd') do echo wkd%%Awkd

call%~fA可替换参数for引用的元素的全名

以前代码中%Afor /f命令的工作方式有所不同

  • for正在启动for /f实例,该实例将执行cmd命令以输出当前目录,该输出由cd中的代码处理为每个输出行调用的子句,该行存储在可替换参数

  • 中 不带修饰符的
  • do直接检索对指定元素的引用,在本例中为for,即当前文件夹。在这种情况下,.用于从相对%~fA引用获取真实全名到绝对路径

所有这些选项只做一件事:延迟检索当前文件夹,直到.被执行。

答案 1 :(得分:0)

尝试一下:

cd .. & For /F %A in ('cd') do echo wkd%Awkd

for循环事件执行命令输出捕获,如下所示:Put command output into a variable

然后我只是用它周围的东西回应那个变量。

原始尝试不起作用的原因是%cd%环境变量在执行任何命令之前设置,并且在解释器完全转到下一个命令之前不会更改。它对待foo& bar作为单个命令有两个部分。