【问题标题】:How to trim leading and trailing white-spaces by a single command?如何通过单个命令修剪前导和尾随空格?
【发布时间】:2015-08-15 13:45:30
【问题描述】:

假设您在变量STRING 中有一个字符串值,您如何使用单个命令(行)删除前导和尾随空格?

例如,字符串是(_ 在这里代表制表符;双引号仅用于说明,不是字符串值的一部分):

"  two spaces, trimmed text string, space-tab-space _ "

预期的输出是(双引号再次不是字符串的一部分):

"two spaces, trimmed text string, space-tab-space"

如何做到这一点?

在这种情况下,当我说“空格”时,我指的是空格和(水平)制表符。

【问题讨论】:

标签: string batch-file cmd


【解决方案1】:

不可能在一行中同时修剪空格 制表符,但您可以使用 this trick:

@echo off
setlocal EnableDelayedExpansion

set "x=  two spaces, trimmed text string, space-space-space   "
echo "%x%"

rem The single line:
set "word=%x: =" & (if "!word!" neq "" set "x2=!x2! !word!") & set "word=%" & set "x2=!x2:~1!"

echo "%x2%"

【讨论】:

  • 有趣。甚至可以使用set "x= spaces, ..., space(s)-tab "(注意空格后的<tab>)。但是,我担心set "x= spaces, ..., no-trailing-space"会失败
  • @JosefZ:是的。 original code 有一个额外的set "x=%x% " 行来避免这个问题,但我作弊了一点,以使这个方法适合“一行”。 ;-)
  • 非常努力,@Aacini,谢谢!如果您以某种方式在答案中提到所需的尾随空格(可能是rem),那会很酷。此外,我发现某些字符会引起麻烦:% 符号(必须在处理之前加倍)、! 标记(它们会消失;还有 ^!^^! 序列)和双引号 @987654335 @;如果您在回答中提到这些限制,那就太好了。
  • 我刚刚发现这个命令行把两个或多个连续的空格变成了一个...
  • @aschipfl:在包含the original code 的帖子之后的两个帖子(这是我第三次在此处包含此类链接)我发布了此方法的修改,并附有以下说明:“我意识到我以前修剪前导和尾随空格的方法也将单词之间的几个空格减少到一个。下面的新方法正确地保留了单词之间的多个空格“.
【解决方案2】:

仅关于 前导 个空格,以下代码有效(_ 表示 TAB):

set "STRING=  two spaces, trimmed text string, space-tab-space _ "

rem no "delims=" option given, so defaulting to spaces and tabs:
for /F "tokens=* eol= " %%S in ("%STRING%") do set "LEFTTRIMMED=%%S"

echo "%LEFTTRIMMED%"

但是,尾随空格仍然存在;但是可以通过this thread中显示的方法将它们删除。

【讨论】:

    猜你喜欢
    • 2011-01-16
    • 2013-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-08
    • 2010-09-12
    • 2014-07-25
    相关资源
    最近更新 更多