我找到了这种解决方案,用于反转之前有效的字符串,但由于某种原因不再存在:
setlocal enabledelayedexpansion
set num=0
:LOOP
call set tmpa=%%advanced:~%num%,1%%%
set /a num+=1
if not "%tmpa%" equ "" (
set string1=%tmpa%%string1%
goto LOOP
)
我收到的消息是:
The input line is too long.
The syntax of the command is incorrect.
我只需要在变量%advanced%
中反转字符串并将其输出到%string1%
。
如果可以在一行中完成反转字符串,那么这对我正在进行的项目非常有帮助。如果可以在没有setlocal enabledelayedexpansion
的情况下完成,那将更有帮助,但我怀疑它是否有可能。
答案 0 :(得分:2)
这样,如果您更改为set string1=!tmpa!!string1!
@echo off
setlocal enabledelayedexpansion
set "advanced=abcdefghijklmnopqrstuvwxyz!"
set "num=0"
:LOOP
call set "tmpa=%%advanced:~%num%,1%%%"
set /a num+=1
if not "%tmpa%" equ "" (
set "string1=!tmpa!!string1!"
goto LOOP
)
echo !string1!
endlocal
另一种方式更快:
@echo off
setlocal enabledelayedexpansion
set "advanced=abcdefghijklmnopqrstuvwxyz"
echo %advanced%>"%tmp%\alpha.tmp"
for %%l in ("%tmp%\alpha.tmp") do set /a len=%%~zl
set /a len-=2
set "reverse="
set "char="
for /l %%i in (0,1,%len%) do (
for /f "usebackq" %%a in ("%tmp%\alpha.tmp") do (
set "char=%%a"
set "reverse=!char:~%%i,1!!reverse!"
)
)
del "%tmp%\alpha.tmp"
echo !reverse!
endlocal
答案 1 :(得分:2)
你说它先工作,后来又不再了;我认为只需清除变量string1
即可。您的代码应该按原样运行。
接下来,您不需要启用延迟扩展,因为您还没有使用它(!!
扩展)。
最后,不是询问tmpa
是否为空,而是可以查询它是否已定义(但这只是品味问题)。
set string1=
set num=0
:LOOP
call set tmpa=%%advanced:~%num%,1%%%
set /a num+=1
if defined tmpa (
set string1=%tmpa%%string1%
goto :LOOP
)
答案 2 :(得分:2)
使用BAT / VBS的另一种方式:
@echo off
set "advanced=1234567890"
echo WScript.Echo StrReverse("%advanced%"^) >reverse.vbs
for /f "delims=" %%a in ('cscript //nologo reverse.vbs') do set "$reversed=%%a"
>nul del reverse.vbs
echo reversed string --^> %$reversed%