如何回显以数字结尾的字符串?

How can I echo a string that ends with a digit?

在 Windows 命令行中,我尝试将以下字符串写入文件:

cloud 9

首先,我尝试 echo cloud 9> file.txt。这只是打印到控制台,而不是文件,大概是由于 9>.

的未定义性质

接下来我尝试 echo cloud 9 > file.txt。这会生成一个文件,其中包含所需的文本 cloud 9,但在行尾有尾随 space。

我尝试了很多其他变体:

echo cloud 91> file.txt 产生 cloud 91.

echo cloud 9 1> file.txt 产生 cloud 9 尾随 space.

echo "cloud 9"> file.txt 产生带有不需要的引号的 "cloud 9"

是否有任何方法可以准确地回显 cloud 9,没有尾随 spaces,到文件?

I/O 重定向不必位于命令的末尾。尝试

echo>file.txt cloud 9

>file.txt echo cloud 9

其他可能的选择:

转义 9:

echo cloud ^9>file.txt

用括号将文本括起来:(请注意任何内部右括号都需要转义)

(echo cloud 9) > file.txt

我的首选方法是将 redirection 部分放在命令前面:

> "file.txt" echo cloud 9

无论如何,您可以将带有数字的回显文本隐藏在变量中。尽管考虑到即时变量扩展,或百分比-(%-)扩展,甚至在重定向表达式被识别之前就发生了,所以 set "CL=cloud 9" 然后 echo %CL%> "file.txt" 是行不通的。但是还有其他一些方法:

  1. 使用delayed expansion(通过运行命令提示符cmd /V启用它):

    set "CL=cloud 9"
    echo !CL!> "file.txt"
    

    或单行:

    set "CL=cloud 9" & echo !CL!> "file.txt"
    

    当文本字符串包含 ! and/or ^.

  2. 时可能会出现问题
  3. 稍后使用 delayed expansion,但最初禁用它:

    set "CL=cloud 9"
    cmd /V /C echo !CL!> "file.txt"
    

    或单行:

    set "CL=cloud 9" & cmd /V /C echo !CL!> "file.txt"
    

    即使 ! and/or ^ 出现在文本字符串中,这也应该有效。

    如果一开始就已经启用延迟扩展,cmd /V /C echo !CL!需要替换为cmd /V /C echo ^^!CL^^!

  4. call再引入一层延迟变量展开:

    set "CL=cloud 9"
    call echo %^CL%> "file.txt"
    

    或者再一行:

    set "CL=cloud 9" & call echo %^CL%> "file.txt"
    

    当文本字符串包含 ^ 时,这可能会导致问题。实际上这依赖于没有定义变量 ^CL 的事实。

  5. 使用for loop循环实现元变量的后期扩展:

    for %I in ("cloud 9") do @echo %~I> "file.txt"
    

    当文本字符串包含*?<>

  6. 时,这可能会导致问题

顺便说一句,您可能想用 echo(Text 替换 echo Text,因为这是在 Text 未知甚至可能是空白,根据 this post on DosTips.com.