2015-08-15 69 views
1

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

例如,字符串(该_代表标签这里;双引号只是为了说明,而不是字符串值的一部分):

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

预期输出(双引号又不部分的字符串):

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

如何做到这一点?

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

+0

使用单个批处理命令是不可能的,但请参阅[如何删除批处理文件中用户提供的输入的尾随和前导空白?](http://stackoverflow.com/q/3001999) – DavidPostill

回答

3

这是不可能的修剪在一行中的两个空间选项卡,但只为空格,你可以使用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%" 
+0

有趣。即使使用'set'x =空格,...,空格(s)-tab \t“'(注意空格后面的''')。但是,恐怕它会失败,因为'set“x =空格,...,没有尾随空格”# – JosefZ

+0

@JosefZ:是的。 [原始代码](http://www.dostips.com/forum/viewtopic.php?f=3&t=6429&p=41356#p41356)有一个额外的'set“x =%x%”'行来避免这个问题,但为了使这种方法适合“一行”,我做了一点小小的尝试。 **';-)'** – Aacini

+0

非常努力,@Aacini,谢谢!如果你在答案中提到了所需的尾部空间(可能是'rem'),那将是很酷的。此外,我发现有些字符会造成麻烦:'%'符号(在处理之前必须加倍),'!'标记(它们只是消失;还有'^!'和'^^!'序列)引用''';如果你在回答中提到了这些限制,它会很棒。 – aschipfl

0

只有关于领先空格,下面的代码工作(_装置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中显示的方法删除。

相关问题