限制变量的字符?

时间:2018-07-21 00:48:03

标签: string batch-file variables

我有许多将在循环中调用的变量。例如,我想要-要使变量超过30个字符,将其剪切为30个字符,并在末尾添加3个点。

  

示例:

set text = Hello world
     

成为:

     

"Hello ..."

但是,这对我有很大帮助-如果任何人都可以做更高级的操作(例如,在剪切某些字符时),请在文本中间添加点。

  

示例:

     

set text = Hello wooooooooooooooooooooooooooooooooorld "

     

成为:

     

"Hello wo...orld"

2 个答案:

答案 0 :(得分:1)

@echo off
call :convert Hello
call :convert Hello beautiful World
call :convert Hello wooooooooooooooooooooooooooooooooorld
goto :eof

:convert
set "x=%*"
REM if the string is shorter than 10 chars, just print it and return:
if "%x:~10%" == "" echo %1 & goto :eof
REM else print first 7 chars, thee dots and the last three chars:
echo %x:~0,7%...%x:~-3%

使以下数字适应您的需要(您提到了30个字符,但没有一个示例与该数字匹配):
10表示“前十个字符”(由于它从零开始计数,因此会检查第11个位置是否有任何字符)
7表示三个点之前的字符数
3表示最后一个字符

答案 1 :(得分:0)

使用%variable:~num_chars_to_skip%

可以轻松解决问题的答案

使用SET命令,我们可以编辑变量并使它删除长度超过30个字符的所有内容。从那里我们可以获取我们创建的新变量,并从那里进行操作。

下面的代码将删除所有超过30个字符,并以text...格式显示它们。

@ECHO OFF

::Edit string one with 30 char limit. String has 40 Chars.
SET String=0123456789012345678901234567890123456789
SET Result=%String:~0,30%
ECHO %Result%...

::Edit string one with 30 char limit. String has 90 Chars.
SET String=012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
SET Result=%String:~0,30%
ECHO %Result%...

::Edit string one with 30 char limit. String has 6 Chars.
SET String=0123456
SET Result=%String:~0,30%
ECHO %Result%...

PAUSE
GOTO :EOF

在此处了解有关语法子字符串的更多信息:https://ss64.com/nt/syntax-substring.html