标题: [文本处理] 【已解决】批处理如何截取通过For语句赋值的变量的值的最后一个字符? [打印本页]
作者: hbb 时间: 2014-6-14 17:43 标题: 【已解决】批处理如何截取通过For语句赋值的变量的值的最后一个字符?
本帖最后由 pcl_test 于 2016-7-3 19:31 编辑
请教以下代码的最后一段“ echo %%a:~-1%”请问执行后为什么不能得到最后一个字符,请问应该如何修改,谢谢!- for /f "tokens=* delims=[2]-" %%a in ('wmic DISKDRIVE get signature ^| find /v /n "" ^| find "[2]"') do echo %%a & echo %%a:~-1%
- pause
复制代码
作者: apang 时间: 2014-6-14 20:27
- for /f %%a in ('wmic DISKDRIVE get signature ^| findstr [0-9]') do (
- set "var=%%a"
- )
- echo,%var%
- echo,%var:~-1%
- pause
复制代码
作者: hbb 时间: 2014-6-14 20:53
回复 2# apang
谢谢您的热心回复,可能我没表达明白我的意思,我是想把我提取的结果的最后一个字符显示出来,谢谢!
作者: Batcher 时间: 2014-6-14 21:44
%%a:~-1% 没有这样的语法
不能直接对for循环的控制变量进行字符串截取
必须先赋值给一个临时变量,然后再截取。
作者: apang 时间: 2014-6-14 21:56
回复 3# hbb
顶楼代码获取的最后一个字符是回车符,你是想把回车符显示出来吗?
作者: hbb 时间: 2014-6-14 22:06
回复 5# apang - @echo off
- for /f "tokens=* delims=[2]-" %%a in ('wmic DISKDRIVE get signature ^| find /v /n "" ^| find "[2]"') do set id=%%a
- echo %id%
- call echo %id:~-1%
- pause
复制代码
我想取%id%变量的最后一个字符是个数字,不是回车,请教如何实现
作者: Batcher 时间: 2014-6-15 10:20
回复 6# hbb
call命令里面应该把%改成%%- @echo off
- for /f "skip=1" %%a in ('wmic DISKDRIVE get signature') do (
- set id=%%a
- goto :next
- )
- :next
- echo %id%
- call echo %%id:~-1%%
- call echo %%id:~-2%%
- pause
复制代码
作者: hbb 时间: 2014-6-15 21:51
本帖最后由 hbb 于 2014-6-15 22:29 编辑
回复 7# Batcher
谢谢管理员热心答复,我在以下命令中ID取值必须要为正数(由于执行wmic DISKDRIVE get signature命令得出的值有可能是负数),就是不要那个减号,并同时取ID数值的最后一位,所以还是需要for /f "tokens=* delims=[2]-"命令,现在关键需要解决执行“call echo %%id:~-1%%”后出现“ECHO 处于关闭”状态的问题。就是不知道是什么原因会出现“ECHO 处于关闭”状态?- @echo off
- for /f "tokens=* delims=[2]-" %%a in ('wmic DISKDRIVE get signature ^| find /v /n "" ^| find "[2]"') do set id=%%a
- echo %id%
- call echo %%id:~-1%%
- pause
复制代码
还想请教管理员,为什么您的脚本中有以下代码就能正常显示结果,没有以下代码执行的话就不能正常显示?复制代码
为什么我添加以上代码执行也不对呢?- @echo off
- for /f "tokens=* delims=[2]-" %%a in ('wmic DISKDRIVE get signature ^| find /v /n "" ^| find "[2]"') do (
- set id=%%a
- goto next
- )
- :next
- echo %id%
- call echo %%id:~-1%%
- pause
复制代码
作者: terse 时间: 2014-6-15 23:55
测试可正常显示 环境win7- @echo off
- for /f "skip=1tokens=*" %%a in ('wmic DISKDRIVE get signature') do for /f %%a in ("%%a") do if not defined id set id=%%a
- echo %id:-=%
- echo %id:~-1%
- pause
复制代码
作者: Batcher 时间: 2014-6-16 09:40
回复 8# hbb
执行这个命令:- wmic DISKDRIVE get signature | find /v /n "" | find "[2]" > a.txt
复制代码
用十六进制编辑器打开a.txt,就会发现行尾有几个不可见字符。
作者: hbb 时间: 2014-6-16 10:33
回复 10# Batcher
是的,所以我用find命令来筛选第二行
作者: Batcher 时间: 2014-6-16 10:46
回复 11# hbb
筛选的结果的行尾有几个不可见字符
作者: hbb 时间: 2014-6-17 10:12
本帖最后由 hbb 于 2014-6-17 10:14 编辑
回复 12# Batcher
确实是有空白字符,不知道为什么用截取倒数第一个字符方式却截取不到空白字符??
作者: Batcher 时间: 2014-6-17 10:30
回复 13# hbb
你不是需要截取最后一个数字吗,分别试试-2和-3
作者: hbb 时间: 2014-6-17 22:07
回复 14# Batcher
确实是要截取数字,只是奇怪为什么截取不到空白字符
作者: Batcher 时间: 2014-6-17 22:25
回复 15# hbb
你看看这个:- @echo off
- for /f "tokens=* delims=[2]-" %%a in ('wmic DISKDRIVE get signature ^| find /v /n "" ^| find "[2]"') do set id=%%a
- echo,%id:~-4%+++>a.txt
复制代码
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |