从Windows批处理文件中的字符串中删除第一个和最后一个字符

时间:2012-08-22 13:42:36

标签: windows batch-file character strip

我的Windows批处理文件中包含以下字符串:

"-String"

该字符串还在字符串的开头和结尾包含两个引号,如上所述。

我想删除第一个和最后一个字符,以便我得到以下字符串:

-String

我试过了:

set currentParameter="-String"
echo %currentParameter:~1,-1%

这将打印出应该是的字符串:

-String

但是当我尝试像这样存储编辑过的字符串时,它会失败:

set currentParameter="-String"
set currentParameter=%currentParameter:~1,-1%
echo %currentParameter%

什么都没打印出来。我做错了什么?


这真的很奇怪。当我删除这样的字符时,它可以工作:

set currentParameter="-String"
set currentParameter=%currentParameter:~1,-1%
echo %currentParameter%

打印出来:

-String

但实际上我的批次有点复杂,并且它不起作用。我将展示我编程的内容:

@echo off

set string="-String","-String2"

Set count=0
For %%j in (%string%) Do Set /A count+=1


FOR /L %%H IN (1,1,%COUNT%) DO ( 

    echo .
        call :myFunc %%H
)
exit /b

:myFunc
FOR /F "tokens=%1 delims=," %%I IN ("%string%") Do (

    echo String WITHOUT stripping characters: %%I 
    set currentParameter=%%I
    set currentParameter=%currentParameter:~1,-1%

    echo String WITH stripping characters: %currentParameter% 

    echo .

)
exit /b   

:end

输出是:

.
String WITHOUT stripping characters: "-String"
String WITH stripping characters:
.
.
String WITHOUT stripping characters: "-String2"
String WITH stripping characters: ~1,-1
.

但我想要的是:

.
String WITHOUT stripping characters: "-String"
String WITH stripping characters: -String
.
.
String WITHOUT stripping characters: "-String2"
String WITH stripping characters: -String2
.

4 个答案:

答案 0 :(得分:4)

您正在使用带括号的块中修改变量。注意 - 新值不会在同一个块中使用(除非您使用!而不是% - 并在enabledelayedexpansion模式下运行来分隔变量)。 或者只是使用()

的简单线条序列将几行提取到另一个子函数中

迎接,Stach

答案 1 :(得分:4)

希望对你有所帮助。 echo字符串没有剥离字符: %%我

set currentParameter=%%I
set currentParameter=!currentParameter:~1,-1!

echo String WITH stripping characters: !currentParameter! 

echo .

它可能会奏效。试一试。

答案 2 :(得分:3)

此脚本利用ENABLEDELAYEDEXPANSION。 如果您不知道,批处理脚本执行for和if命令all in one;因此,如果你这样做:

if true==true (
@echo off
set testvalue=123
echo %testvalue%
pause >NUL
)

您不会输出任何内容,因为当执行echo%testvalue%时,它无法识别测试值已被更改。 使用delayedexapnsion允许脚本按原样读取该值,并忘记我之前说过的问题。你像%testvalue%一样使用它,但你可以这样做!testvalue!解决这个问题:

if true==true (
@echo off
set testvalue=123
echo !testvalue!
pause >NUL
)
  • 会回复123。
@echo off
SETLOCAL ENABLEDELAYEDEXPANSION
set string="-String","-String2"
Set count=0

For %%j in (%string%) Do Set /A count+=1

FOR /L %%H IN (1,1,%COUNT%) DO ( 
echo .
call :myFunc %%H
)

exit /b
:myFunc

FOR /F "tokens=%1 delims=," %%I IN ("%string%") Do (
echo String WITHOUT stripping characters: %%I 
set currentParameter=%%I
set currentParameter=!currentParameter:~1,-1!
echo String WITH stripping characters: !currentParameter! 
echo .
)

exit /b   
:end

~Alex

答案 3 :(得分:0)

我有类似的问题,但是它通过消除 例如:set FileName =%Name:〜0.11%#在'='之前和之后都没有空格 例如:set FileName =%Name:〜0,11%#在'='之前或之后不能作为空格

所以请尝试删除空格,它应该可以工作 注意:应该重新打开命令行以刷新背景值,否则它将显示与存储在temp中相同的输出