如何回显以数字结尾的字符串?
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"
是行不通的。但是还有其他一些方法:
使用delayed expansion(通过运行命令提示符cmd /V
启用它):
set "CL=cloud 9"
echo !CL!> "file.txt"
或单行:
set "CL=cloud 9" & echo !CL!> "file.txt"
当文本字符串包含 !
and/or ^
.
时可能会出现问题
稍后使用 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^^!
。
用call
再引入一层延迟变量展开:
set "CL=cloud 9"
call echo %^CL%> "file.txt"
或者再一行:
set "CL=cloud 9" & call echo %^CL%> "file.txt"
当文本字符串包含 ^
时,这可能会导致问题。实际上这依赖于没有定义变量 ^CL
的事实。
使用for
loop循环实现元变量的后期扩展:
for %I in ("cloud 9") do @echo %~I> "file.txt"
当文本字符串包含*
、?
或<
、>
、
时,这可能会导致问题
顺便说一句,您可能想用 echo(Text
替换 echo Text
,因为这是在 Text
未知甚至可能是空白,根据 this post on DosTips.com.
在 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"
是行不通的。但是还有其他一些方法:
使用delayed expansion(通过运行命令提示符
cmd /V
启用它):set "CL=cloud 9" echo !CL!> "file.txt"
或单行:
set "CL=cloud 9" & echo !CL!> "file.txt"
当文本字符串包含
!
and/or^
. 时可能会出现问题
稍后使用 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^^!
。用
call
再引入一层延迟变量展开:set "CL=cloud 9" call echo %^CL%> "file.txt"
或者再一行:
set "CL=cloud 9" & call echo %^CL%> "file.txt"
当文本字符串包含
^
时,这可能会导致问题。实际上这依赖于没有定义变量^CL
的事实。使用
for
loop循环实现元变量的后期扩展:for %I in ("cloud 9") do @echo %~I> "file.txt"
当文本字符串包含
*
、?
或<
、>
、 时,这可能会导致问题
顺便说一句,您可能想用 echo(Text
替换 echo Text
,因为这是在 Text
未知甚至可能是空白,根据 this post on DosTips.com.