无忧启动论坛

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

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

    [复制链接]
1#
发表于 2018-6-28 10:25:31 | 显示全部楼层
pecmd.exe

SET A=1245.5545.4784264-5455.65455
RPOS B=.,1,%A%
CALC #B=%B%-1
LSTR A2=%B%,%a%
MESS %A2%

点评

多谢高手,需要正常系统的批处理  详情 回复 发表于 2018-6-28 10:36
回复

使用道具 举报

2#
发表于 2018-6-28 11:09:52 | 显示全部楼层
本帖最后由 chiannet 于 2018-6-28 11:13 编辑
2012xb21cn 发表于 2018-6-28 10:37
多谢指点,只能再去学习下



没有用For ,语句不够精炼。但可以实现目标。

  1. @ECHO OFF
  2. SETLOCAL ENABLEDELAYEDEXPANSION
  3. set A=1245.5545.4784264-5455.65455
  4. CALL :LS "%A%"
  5. echo !A:~0,%D%!
  6. :END
  7. pause


  8. :LS
  9. IF %~1*==* GOTO :END
  10. SET "B=%~1"
  11. SET /A N=0
  12. SET /A D=0
  13. :LOOP
  14. SET B=%B:~0,-1%
  15. SET D2=%B:~-1,1%
  16. SET /A N=%N%+1
  17. IF "%D2%"=="."  (IF %N% GTR  %D% (SET /A  D=%N%-1))
  18. IF "%B%"=="" GOTO :EOF
  19. GOTO LOOP
复制代码

点评

多谢C大,我已经用for/f分列式弄出来了  详情 回复 发表于 2018-6-28 11:30
回复

使用道具 举报

3#
发表于 2018-6-28 12:01:04 | 显示全部楼层
本帖最后由 chiannet 于 2018-6-28 12:02 编辑
2012xb21cn 发表于 2018-6-28 11:30
多谢C大,我已经用for/f分列式弄出来了


不使用for,可能比较精炼的代码:

  1. @ECHO OFF

  2. SET "B=1245.5545.4784264-5455.65455"
  3. SET RESULT=找不到.

  4. :LOOP
  5. SET D=%B:~-1,1%
  6. SET B=%B:~0,-1%
  7. IF "%D%"=="."  (SET "RESULT=%B%" && GOTO :END)
  8. IF "%B%"=="" GOTO :END
  9. GOTO LOOP

  10. :END
  11. ECHO %RESULT%
  12. PAUSE
  13. EXIT
复制代码

点评

没有 setlocal ENABLEDELAYEDEXPANSION的情况西啊,你这个 更清新 。  详情 回复 发表于 2018-6-28 12:11
回复

使用道具 举报

4#
发表于 2018-6-28 16:00:44 | 显示全部楼层
本帖最后由 chiannet 于 2018-6-28 16:02 编辑
2012xb21cn 发表于 2018-6-28 15:01
赞,这个思路不错




这个并不太好,比如以下字符串


  1. 1245.55,45.478,4264-5455.65,4.55

复制代码


如果要以","为分隔符,截取最右","之前的字符,如果把","替换为".",再按文件名来整,显然会得错误结果。其实16楼的比较精炼了。

稍微改一下,还可以实现获取最左"."后的字符串等。

点评

16F的通用性确实好很多! 但突然发神经,想获取第一个.号前面的字符串呢? 脑阔大!!!  详情 回复 发表于 2018-6-28 18:13
那如何批量从文件中读取修改呢(每行都是类似数据)?试着改了下总不成功  详情 回复 发表于 2018-6-28 16:06
回复

使用道具 举报

5#
发表于 2018-6-28 17:03:54 | 显示全部楼层
2012xb21cn 发表于 2018-6-28 16:06
那如何批量从文件中读取修改呢(每行都是类似数据)?试着改了下总不成功
  1. @ECHO OFF
  2. del "%~DP0转化后.TXT" /F >NUL 2>NUL
  3. FOR /F "delims=" %%I IN ('type "%~DP0原始.txt"')  DO  CALL :L "%%I"
  4. EXIT

  5. :L
  6. SET "B=%~1"
  7. SET RE=此行找不到”.“

  8. :R
  9. SET D=%B:~-1,1%
  10. SET B=%B:~0,-1%
  11. IF "%D%"=="."  (SET "RE=%B%"&&GOTO :E)
  12. IF "%B%"=="" GOTO :E
  13. GOTO R

  14. :E
  15. ECHO %RE% >>"%~DP0转化后.TXT"
  16. GOTO :EOF
复制代码

评分

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

查看全部评分

回复

使用道具 举报

6#
发表于 2018-6-28 17:05:05 | 显示全部楼层
修改一下上面代码的原始.txt及转化后.txt的路径

点评

多谢C大,换其它字符都测试成功  详情 回复 发表于 2018-6-28 17:26
回复

使用道具 举报

7#
发表于 2018-6-29 08:53:37 | 显示全部楼层
本帖最后由 chiannet 于 2018-6-29 09:09 编辑
holley2008 发表于 2018-6-29 07:06
获取的是第一个.后面的字符串,,,我想要的是获取第一个.前面的字符串
用for比较简单













  1. @ECHO OFF
  2. SETLOCAL ENABLEDELAYEDEXPANSION
  3. SET A1=左&SET A2=右&SET B1=前&SET B2=后

  4. :N
  5. CLS
  6. ECHO.&ECHO.
  7. ECHO.&ECHO.
  8. SET /P FS=输入定位符号并回车:
  9. REM 定位符号,赋值给FS,本批处理只能处理长度为1的单字符。
  10. IF "%FS%"=="" (ECHO.&ECHO 输入无效,请重新输入!
  11. PAUSE >NUL && CLS && GOTO N) ELSE (SET FS=%FS:~0,1%)

  12. SET "TP=%~DP0"
  13. REM 原始.TXT所在路径名,赋值给TP,以“\”结尾。
  14. IF NOT EXIST "%TP%原始.TXT" (ECHO.&ECHO 未发现"%TP%原始.TXT"
  15. PAUSE >NUL && CLS && EXIT)

  16. :M
  17. CLS
  18. SET AX=&SET BX=
  19. ECHO.&ECHO.
  20. ECHO.&ECHO              按需求变换“原始.TXT”中每行字符串
  21. ECHO.&ECHO.
  22. ECHO.&ECHO        1、取得最%A1%“%FS%”之%B1%的字符
  23. ECHO.&ECHO        2、取得最%A1%“%FS%”之%B2%的字符
  24. ECHO.&ECHO        3、取得最%A2%“%FS%”之%B1%的字符
  25. ECHO.&ECHO        4、取得最%A2%“%FS%”之%B2%的字符
  26. ECHO.&ECHO        5、退出

  27. ECHO.&ECHO.
  28. SET /P AB=输入代码并回车:
  29. IF NOT "%AB%"=="" SET AB=%AB:~0,1%
  30. IF "%AB%"=="1" (SET AX=%A1%&SET BX=%B1%)
  31. IF "%AB%"=="2" (SET AX=%A1%&SET BX=%B2%)
  32. IF "%AB%"=="3" (SET AX=%A2%&SET BX=%B1%)
  33. IF "%AB%"=="4" (SET AX=%A2%&SET BX=%B2%)
  34. IF "%AB%"=="5" EXIT
  35. IF "%AX%"=="" (ECHO.&ECHO 输入无效,请重新输入!
  36. PAUSE >NUL && CLS && GOTO M)
  37. SET PT="%TP%最%AX%定位符之%BX%的字符.TXT"
  38. DEL %PT% /F >NUL 2>NUL
  39. FOR /F "DELIMS=" %%I IN ('TYPE "%TP%原始.TXT"')  DO  CALL :L "%%I"
  40. IF EXIST %PT% (CLS&ECHO.&ECHO %PT% 已创建。&ECHO.&ECHO.&PAUSE)
  41. GOTO M

  42. :L
  43. SET "B=%~1"
  44. IF "%AB%"=="1"  (IF "%B:~0,1%"=="%FS%" (SET "RE=有一个“%FS%”位于此行首位。"&GOTO E))
  45. IF "%AB%"=="4"  (IF "%B:~-1%"=="%FS%" (SET "RE=有一个“%FS%”位于此行末尾。"&GOTO E))
  46. SET RE=此行找不到指定的定位符号"%FS%"!
  47. SET /A N=1
  48. SET "A=%~1"

  49. :R
  50. SET /A NN=%N%-1

  51. IF "%AB%"=="4" (SET "B=!A:~-%N%!"
  52.         SET "D=!B:~0,1!"
  53.         IF "!D!"=="%FS%" (SET "RE=!A:~-%NN%!"&GOTO E)
  54.         IF "!B!"=="%A%" GOTO E)

  55. IF "%AB%"=="3"  (SET D=%B:~-1,1%
  56.         SET B=!B:~0,-1!
  57.         IF "!D!"=="%FS%"  (SET "RE=!B!"&GOTO E))

  58. IF "%AB%"=="2"  (SET D=%B:~0,1%
  59.         SET B=!B:~1,100000!
  60.         IF "!D!"=="%FS%"  (SET "RE=!B!"&GOTO E))

  61. IF "%AB%"=="1" (SET "B=!A:~0,%N%!"
  62.         SET "D=!B:~-1!"
  63.         IF "!D!"=="%FS%"  (SET "RE=!A:~0,%NN%!"&GOTO E)
  64.         IF "!B!"=="%A%" GOTO E)

  65. SET /A N=%N%+1
  66. IF %AB% GTR 1 (IF %AB% LSS 4 (IF "%B%"=="" GOTO E))
  67. GOTO R

  68. :E
  69. IF %AB% GTR 1 (IF %AB% LSS 4 (IF "%RE%"=="" SET "RE=有且仅有一个“%FS%”位于此行最%BX%位。"))
  70. ECHO %RE%>>%PT%
  71. GOTO :EOF




复制代码
回复

使用道具 举报

8#
发表于 2018-6-29 09:02:18 | 显示全部楼层
闲得那个痛才搞这样的代码
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-5-12 07:10

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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