[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文本处理] 【已解决】批处理如何截取通过For语句赋值的变量的值的最后一个字符?

本帖最后由 pcl_test 于 2016-7-3 19:31 编辑

请教以下代码的最后一段“ echo %%a:~-1%”请问执行后为什么不能得到最后一个字符,请问应该如何修改,谢谢!
  1. for /f "tokens=* delims=[2]-" %%a in ('wmic DISKDRIVE get signature ^| find /v /n "" ^| find "[2]"') do echo %%a & echo %%a:~-1%
  2. pause
复制代码
1

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2

  1. for /f %%a in ('wmic DISKDRIVE get signature ^| findstr [0-9]') do (
  2.     set "var=%%a"
  3. )
  4. echo,%var%
  5. echo,%var:~-1%
  6. pause
复制代码

TOP

回复 2# apang


    谢谢您的热心回复,可能我没表达明白我的意思,我是想把我提取的结果的最后一个字符显示出来,谢谢!

TOP

%%a:~-1% 没有这样的语法
不能直接对for循环的控制变量进行字符串截取
必须先赋值给一个临时变量,然后再截取。
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 3# hbb


    顶楼代码获取的最后一个字符是回车符,你是想把回车符显示出来吗?

TOP

回复 5# apang
  1. @echo off
  2. for /f "tokens=* delims=[2]-" %%a in ('wmic DISKDRIVE get signature ^| find /v /n "" ^| find "[2]"') do set id=%%a
  3. echo %id%
  4. call echo %id:~-1%
  5. pause
复制代码
我想取%id%变量的最后一个字符是个数字,不是回车,请教如何实现

TOP

回复 6# hbb


call命令里面应该把%改成%%
  1. @echo off
  2. for /f "skip=1" %%a in ('wmic DISKDRIVE get signature') do (
  3.     set id=%%a
  4.     goto :next
  5. )
  6. :next
  7. echo %id%
  8. call echo %%id:~-1%%
  9. call echo %%id:~-2%%
  10. pause
复制代码
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

本帖最后由 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 处于关闭”状态?
  1. @echo off
  2. for /f "tokens=* delims=[2]-" %%a in ('wmic DISKDRIVE get signature ^| find /v /n "" ^| find "[2]"') do set id=%%a
  3. echo %id%
  4. call echo %%id:~-1%%
  5. pause
复制代码
还想请教管理员,为什么您的脚本中有以下代码就能正常显示结果,没有以下代码执行的话就不能正常显示?
  1. goto next
  2. )
  3. :next
复制代码
为什么我添加以上代码执行也不对呢?
  1. @echo off
  2. for /f "tokens=* delims=[2]-" %%a in ('wmic DISKDRIVE get signature ^| find /v /n "" ^| find "[2]"') do (
  3.     set id=%%a
  4.     goto next
  5. )
  6. :next
  7. echo %id%
  8. call echo %%id:~-1%%
  9. pause
复制代码

TOP

测试可正常显示 环境win7
  1. @echo off
  2. for /f "skip=1tokens=*" %%a in ('wmic DISKDRIVE get signature') do for /f %%a in ("%%a") do if not defined id  set id=%%a
  3. echo %id:-=%
  4. echo %id:~-1%
  5. pause
复制代码

TOP

回复 8# hbb


执行这个命令:
  1. wmic DISKDRIVE get signature | find /v /n "" | find "[2]" > a.txt
复制代码
用十六进制编辑器打开a.txt,就会发现行尾有几个不可见字符。
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 10# Batcher


    是的,所以我用find命令来筛选第二行

TOP

回复 11# hbb


    筛选的结果的行尾有几个不可见字符
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

本帖最后由 hbb 于 2014-6-17 10:14 编辑

回复 12# Batcher


   确实是有空白字符,不知道为什么用截取倒数第一个字符方式却截取不到空白字符??

TOP

回复 13# hbb


    你不是需要截取最后一个数字吗,分别试试-2和-3
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 14# Batcher


    确实是要截取数字,只是奇怪为什么截取不到空白字符

TOP

返回列表