无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站广告联系 微信:wuyouceo QQ:184822951
楼主: 2012xb21cn
打印 上一主题 下一主题

[求助] 删除第N个某字符后面的所有字符

    [复制链接]
1#
发表于 2018-6-28 10:28:11 | 显示全部楼层
用 for 逆序 计数  找到 .  后 用 Set 截取。

点评

多谢指点,只能再去学习下  详情 回复 发表于 2018-6-28 10:37
回复

使用道具 举报

2#
发表于 2018-6-28 11:38:51 | 显示全部楼层
本帖最后由 dos时代菜鸟 于 2018-6-28 11:51 编辑

不知道 字符串中 . 的个数是否固定,如果知道 . 的个数是固定的,一句话就可以了。
否则,用这个 从后面 开始 一个字符一个字符的判断,并计数。明确位置,截取显示。

  1. @echo off
  2. setlocal ENABLEDELAYEDEXPANSION
  3. set "lx001=1245.5545.4784264-5455.65455"
  4. set "s1=."

  5. echo lx001="!lx001!"
  6. echo s1="!s1!"
  7. echo.

  8. set /a n=1
  9. :loop
  10.   for /f %%n in ("!n!") do (
  11.     if "!lx001:~%%n,1!"=="" goto end_l
  12.     if "!lx001:~-%%n,1!"=="!s1!" (    echo !lx001:~0,-%%n! &    goto end )
  13.   )
  14.   set /a n+=1
  15. goto loop
  16. :end_loop

  17. :end_l
  18.   echo 总长度 !n!,没找到 关键字符。
  19. :end
  20.   pause
复制代码

点评

这个?我可以投机取巧吗?? for /f "delims=" %%a in ("需要处理的字符") do echo %%~na  详情 回复 发表于 2018-6-28 11:54

评分

参与人数 1无忧币 +5 收起 理由
freesoft00 + 5

查看全部评分

回复

使用道具 举报

3#
发表于 2018-6-28 11:56:58 | 显示全部楼层
本帖最后由 dos时代菜鸟 于 2018-6-28 11:59 编辑
nttwqz 发表于 2018-6-28 11:54
这个?我可以投机取巧吗??

for /f "delims=" %%a in ("需要处理的字符") do echo %%~na

你这样 得到的 难道 不是 一个 文件名么?

  1. 另外,FOR 变量参照的替换已被增强。你现在可以使用下列
  2. 选项语法:

  3.      %~I          - 删除任何引号("),扩展 %I
  4.      %~fI        - 将 %I 扩展到一个完全合格的路径名
  5.      %~dI        - 仅将 %I 扩展到一个驱动器号
  6.      %~pI        - 仅将 %I 扩展到一个路径
  7.      %~nI        - 仅将 %I 扩展到一个文件名
  8.      %~xI        - 仅将 %I 扩展到一个文件扩展名
  9.      %~sI        - 扩展的路径只含有短名
  10.      %~aI        - 将 %I 扩展到文件的文件属性
  11.      %~tI        - 将 %I 扩展到文件的日期/时间
  12.      %~zI        - 将 %I 扩展到文件的大小
  13.      %~$PATH:I   - 查找列在路径环境变量的目录,并将 %I 扩展
  14.                    到找到的第一个完全合格的名称。如果环境变量名
  15.                    未被定义,或者没有找到文件,此组合键会扩展到
  16.                    空字符串

  17. 可以组合修饰符来得到多重结果:

  18.      %~dpI       - 仅将 %I 扩展到一个驱动器号和路径
  19.      %~nxI       - 仅将 %I 扩展到一个文件名和扩展名
  20.      %~fsI       - 仅将 %I 扩展到一个带有短名的完整路径名
  21.      %~dp$PATH:I - 搜索列在路径环境变量的目录,并将 %I 扩展
  22.                    到找到的第一个驱动器号和路径。
  23.      %~ftzaI     - 将 %I 扩展到类似输出线路的 DIR
复制代码

点评

你可以试一下,文件名也是字符嘛!只不过不能用文件名没有的特殊字符而已,所以才叫投机取巧嘛!哈哈哈哈  详情 回复 发表于 2018-6-28 12:00
回复

使用道具 举报

4#
发表于 2018-6-28 12:02:12 | 显示全部楼层
nttwqz 发表于 2018-6-28 12:00
你可以试一下,文件名也是字符嘛!只不过不能用文件名没有的特殊字符而已,所以才叫投机取巧嘛!哈哈哈哈

有道理,分隔符 恰恰是 文件名 扩展名 分隔符。
哈哈哈。
这个可以有。
回复

使用道具 举报

5#
发表于 2018-6-28 12:11:25 | 显示全部楼层
chiannet 发表于 2018-6-28 12:01
不使用for,可能比较精炼的代码:


没有 setlocal ENABLEDELAYEDEXPANSION的情况下,你这个  更清新 。
回复

使用道具 举报

6#
发表于 2018-6-28 22:10:00 | 显示全部楼层
本帖最后由 dos时代菜鸟 于 2018-6-28 22:19 编辑

从前往后 剔除第一个 . 前面的部分
两个方法,自己选。


  1. @echo off
  2. set "lx001=1245.5545.4784264-5455.65455"
  3. :loop
  4.         if "%lx001:~0,1%"=="" goto end
  5.         if "%lx001:~0,1%"=="." goto end
  6.         set lx001=%lx001:~1%
  7.         goto loop
  8. :end
  9. echo “%lx001:~1%”
  10. pause
复制代码


  1. @echo off
  2. for /f "tokens=1,* delims=." %%a in ("1245.5545.4784264-5455.65455") do (echo "%%b")
  3. pause
复制代码

点评

获取的是第一个.后面的字符串,,,我想要的是获取第一个.前面的字符串 用for比较简单 但想靠set分割 来做 有点抓瞎...  详情 回复 发表于 2018-6-29 07:06
回复

使用道具 举报

7#
发表于 2018-6-28 22:14:51 | 显示全部楼层

如果原字符串中含有  \  就会产生误解。
回复

使用道具 举报

8#
发表于 2018-6-29 09:29:11 | 显示全部楼层
本帖最后由 dos时代菜鸟 于 2018-6-29 10:54 编辑




一个 豆豆 的事情,搞得大家都  很 会逗了。哈哈哈
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2024-5-12 17:41

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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