找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 82946|回复: 15

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

[复制链接]
发表于 2014-6-14 17:43:26 | 显示全部楼层 |阅读模式
本帖最后由 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
复制代码

评分

参与人数 1PB +2 收起 理由
Batcher + 2 感谢给帖子标题标注[已解决]字样

查看全部评分

发表于 2014-6-14 20:27:57 | 显示全部楼层
  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
复制代码
 楼主| 发表于 2014-6-14 20:53:11 | 显示全部楼层
回复 2# apang


    谢谢您的热心回复,可能我没表达明白我的意思,我是想把我提取的结果的最后一个字符显示出来,谢谢!
发表于 2014-6-14 21:44:48 | 显示全部楼层
%%a:~-1% 没有这样的语法
不能直接对for循环的控制变量进行字符串截取
必须先赋值给一个临时变量,然后再截取。
发表于 2014-6-14 21:56:27 | 显示全部楼层
回复 3# hbb


    顶楼代码获取的最后一个字符是回车符,你是想把回车符显示出来吗?
 楼主| 发表于 2014-6-14 22:06:24 | 显示全部楼层
回复 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%变量的最后一个字符是个数字,不是回车,请教如何实现
发表于 2014-6-15 10:20:19 | 显示全部楼层
回复 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
复制代码
 楼主| 发表于 2014-6-15 21:51:42 | 显示全部楼层
本帖最后由 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
复制代码
发表于 2014-6-15 23:55:21 | 显示全部楼层
测试可正常显示 环境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
复制代码
发表于 2014-6-16 09:40:50 | 显示全部楼层
回复 8# hbb


执行这个命令:
  1. wmic DISKDRIVE get signature | find /v /n "" | find "[2]" > a.txt
复制代码
用十六进制编辑器打开a.txt,就会发现行尾有几个不可见字符。
 楼主| 发表于 2014-6-16 10:33:19 | 显示全部楼层
回复 10# Batcher


    是的,所以我用find命令来筛选第二行
发表于 2014-6-16 10:46:13 | 显示全部楼层
回复 11# hbb


    筛选的结果的行尾有几个不可见字符
 楼主| 发表于 2014-6-17 10:12:44 | 显示全部楼层
本帖最后由 hbb 于 2014-6-17 10:14 编辑

回复 12# Batcher


   确实是有空白字符,不知道为什么用截取倒数第一个字符方式却截取不到空白字符??
发表于 2014-6-17 10:30:42 | 显示全部楼层
回复 13# hbb


    你不是需要截取最后一个数字吗,分别试试-2和-3
 楼主| 发表于 2014-6-17 22:07:42 | 显示全部楼层
回复 14# Batcher


    确实是要截取数字,只是奇怪为什么截取不到空白字符
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-21 07:55 , Processed in 0.036918 second(s), 18 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表