标题: 如何截取变量中的倒数第二个字符串~?
[打印本页]
作者: pusofalse
时间: 2008-5-11 23:34
标题: 如何截取变量中的倒数第二个字符串~?
var=abc def ghi jkl mno
输出jkl
var的值不定。。。 其中总是有空格,以空格作为分割符 输出倒数第二个字符串~
^_^
作者: pusofalse
时间: 2008-5-11 23:43
抛砖引玉一下~
@echo off&setlocal enabledelayedexpansion
:: var=abc def ghi jkl mno 输出jkl
set var=abc def ghi jkl mno
set var=%var: =.%
for %%a in (%var%) do (
set var=%%~na
set var=!var:.= !
for %%i in (!var!) do set var=%%i
)
echo %var%
pause
作者: bat-zw
时间: 2008-5-11 23:45
@echo off&setlocal enabledelayedexpansion
:begin
cls&set /p var=请输入以空格格开的n组字符串:
if "%var%"=="" goto begin
for %%i in (%var%) do (
set/a n+=1,m+=1
set _!n!=%%i
)
set /a m-=1
cls&echo 倒数第二组字符串为:!_%m%!
pause>nul
[
Last edited by zw19750516 on 2008-5-11 at 11:48 PM ]
作者: bat-zw
时间: 2008-5-11 23:51
我还是有点粗心,对着写老是写错字符,哎!
作者: pusofalse
时间: 2008-5-11 23:52
高!
我的只能只能截取倒数第二个。。。
你的却能任意截取~
赞佩!~
作者: lxmxn
时间: 2008-5-11 23:53
我也来一个~
@echo off & SetLocal EnableDelayedExpansion
set var=abc def ghi jkl mno
for %%a in (%var%) do (
set result=!temp!
set temp=%%a
)
echo.%result%
作者: pusofalse
时间: 2008-5-11 23:57
Quote: |
Originally posted by lxmxn at 2008-5-11 11:53 PM:
我也来一个~
@echo off & SetLocal EnableDelayedExpansion
set var=abc def ghi jkl mno
for %%a in (%var%) do (
set result=!temp!
set temp=%%a
)
echo.%result% |
|
版主能解释下吗?~ 不懂~
作者: pusofalse
时间: 2008-5-11 23:59
啊! 我懂了!
高明啊~!
作者: HAT
时间: 2008-5-11 23:59
版主的思路值得学习,我刚刚想到这里版主已经把代码贴出来了,佩服。
作者: bat-zw
时间: 2008-5-12 00:00
Quote: |
Originally posted by lxmxn at 2008-5-11 23:53:
我也来一个~
@echo off & SetLocal EnableDelayedExpansion
set var=abc def ghi jkl mno
for %%a in (%var%) do (
set result=!temp!
set temp=%%a
)
echo.%result% |
|
版主的方法确实妙,但不足之处还是不通用。
作者: lxmxn
时间: 2008-5-12 00:01
Quote: |
Originally posted by pusofalse at 2008-5-11 23:57:
版主能解释下吗?~ 不懂~ |
|
for 循环到最后一次的时候,将 result 的值赋值为 temp 的值,而此时 temp 的值真好是倒数第二次迭代的 %%a,所以可以得到倒数第二个字符串。
作者: pusofalse
时间: 2008-5-12 00:02
Quote: |
Originally posted by lxmxn at 2008-5-12 12:01 AM:
for 循环到最后一次的时候,将 result 的值赋值为 temp 的值,而此时 temp 的值真好是倒数第二次迭代的 %%a,所以可以得到倒数第二个字符串。 |
|
谢谢~~明白了~
作者: slore
时间: 2008-5-12 00:07
@echo off
set x=2
set var=abc def ghi jkl mno
set var=%var: =.%
Call :f1 %var%
echo %var:~1%
pause>nul
exit
:f1
set /a n+=1
if %n% equ %x% Set var=%~x1&goto :end
Set var=%~n1
Call :f1 %var%
:end
作者: 26933062
时间: 2008-5-12 00:07
我也来一个。
@echo off
set var=afb dedf dflke yes mno
call :loop %var%
pause
:loop
if "%3"=="" echo %1&goto :eof
shift&goto loop
作者: bat-zw
时间: 2008-5-12 00:14
Quote: |
Originally posted by 26933062 at 2008-5-12 00:07:
我也来一个。
@echo off
set var=afb dedf dflke yes mno
call :loop %var%
pause
:loop
if "%3"=="" echo %1&goto :eof
shift&goto loop |
|
利用shift移位超强,学习了!!!
作者: 26933062
时间: 2008-5-12 00:21
再来二个
@echo off
set var=afb dedf dflke yes mno
for %%a in (%var%) do set /a n+=1,m=n-1
for /f "tokens=%m% delims= " %%a in ("%var%") do echo %%a
pause
@echo off
set var=afb dedf dflke yes mno
for %%a in (%var%) do call set str=%%a %%str%%
for /f "tokens=2 delims= " %%a in ("%str%") do echo %%a
pause
[
Last edited by 26933062 on 2008-5-12 at 12:24 AM ]
作者: slore
时间: 2008-5-12 00:21
方法挺多的嗬。。。
shift开始就想了……不过感觉……移位次数等于 总长度-1
我改楼主的方法,执行是固定2次……
单独重次数分析,具体快慢就不知道了。
作者: bat-zw
时间: 2008-5-12 00:22
标题: 水一个:
pusofalse兄弟学习认真,思路活跃,钻研刻苦,提高迅速,值得加分鼓励!!!
作者: pusofalse
时间: 2008-5-12 00:23
简直太强了。。一道题目竟有这么多解法,赞佩各位前辈的思维!
作者: pusofalse
时间: 2008-5-12 00:24
Quote: |
Originally posted by zw19750516 at 2008-5-12 12:22 AM:
pusofalse兄弟学习认真,思路活跃,钻研刻苦,提高迅速,值得加分鼓励!!! |
|
多谢前辈赏识~

我都不好意思了~ ^_^
作者: bat-zw
时间: 2008-5-12 00:26
Quote: |
Originally posted by pusofalse at 2008-5-12 00:24:
多谢前辈赏识~ :D 我都不好意思了~ ^_^ |
|
不要不好意思了,兄弟cn-dos需要你这样的人,加油啊!!!
作者: pusofalse
时间: 2008-5-12 00:29
Quote: |
Originally posted by zw19750516 at 2008-5-12 12:26 AM:
不要不好意思了,兄弟cn-dos需要你这样的人,加油啊!!! |
|
^_^ 我也只是在CN-DOS成张起来的而已~ 当然会出自己的一份力的~
作者: terse
时间: 2008-5-12 01:05
我也来一个
@echo off
set var=afb dedf dflke yes mno
set var=%var: =.%&call:lp %%var%%
echo %str:~1%
pause&goto :eof
:lp
if not defined str (set str=%~n1&call:lp %%str%%)else set str=%~x1
作者: 26933062
时间: 2008-5-12 03:20
再来个另类点的。
@echo off
set "var=afb dedf dflke sd yes mno"
set var=%var: ="%
%var:*"=set "var=%
set var=%var:"= %
for %%a in (%var%) do set var=%%a
echo %var%
pause
作者: pusofalse
时间: 2008-5-12 04:11
Quote: |
Originally posted by 26933062 at 2008-5-12 03:20 AM:
再来个另类点的。
[code]
@echo off
set "var=afb dedf dflke sd yes mno"
set var=%var: ="%
%var:*"=set "var=%
set var=%var:"= %
for %%a in (%var%) do set v ... |
|
明白了。。。但是set 有这种用法吗~?
删除最前和最后面的?~
[
Last edited by pusofalse on 2008-5-12 at 04:16 AM ]
作者: moniuming
时间: 2008-5-12 11:09
Quote: |
Originally posted by 26933062 at 2008-5-12 03:20:
再来个另类点的。
[code]
@echo off
set "var=afb dedf dflke sd yes mno"
set var=%var: ="%
%var:*"=set "var=%
set var=%var:"= %
for %%a in (%var%) do set v ... |
|
怎么红色这行没有set也可以呢,请解释一下