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

[文本处理] [已解决]批处理命令FOR如何取TXT文本指定的数值赋予多个变量?

本帖最后由 lateol 于 2013-7-5 19:48 编辑

如我用以下代码获取一些文本的内容
  1. @echo off
  2. for /f "tokens=* delims=PG" %%l in ('findstr /ic:"G54.1P" *.nc') do (
  3.        echo %%l>>1.txt
  4. )
  5. pause
复制代码
得到
如要截取红色部分分别赋值 %%l  %%m   并写入 1.txt
写入后如下
5  002H12-R1.NC
5  002H12-R2.NC

我是想通过P后面的值 作为排序,当全部写入1.txt后  再按前面的这个值排序。
但是感觉定点提取又不太行的通如蓝色部分就不一样。看看还有没有什么好的方法。

002H12-F1.NC:G00 G90 G54.1P6 X0 Y0
002H12-F2.NC:G00 G90 G54.1P6 X0 Y0
002H12-F3.NC:G00 G90 G54.1P6 X0 Y0
002H12-R1.NC:G00 G90 G54.1P5 X0 Y0
002H12-R2.NC:G00 G90 G54.1P5 X0 Y0
002H12-R3.NC:G00 G90 G54.1P5 X0 Y0
13124A1A.nc:G90G54.1P3G00X0.Y0.

13124A1AA.nc:G90G54.1P4G00X0.Y0.
13124A1B.nc:G90G54.1P3G00X0.Y0.
13124A1BB.nc:G90G54.1P4G00X0.Y0.
13124A1C.nc:G90G54.1P3G00X0.Y0.
13124A1CC.nc:G90G54.1P4G00X0.Y0.
13124A1D.nc:G90G54.1P3G00X0.Y0.
13124A1DD.nc:G90G54.1P4G00X0.Y0.
13124A1E.nc:G90G54.1P3G00X0.Y0.
13124A1EE.nc:G90G54.1P4G00X0.Y0.
13124A1F.nc:G90G54.1P3G00X0.Y0.
13124A1FF.nc:G90G54.1P4G00X0.Y0.
13124A3A.nc:G90G54.1P2G00X0.Y0.
13124A3B.nc:G90G54.1P2G00X0.Y0.
13124A3C.nc:G90G54.1P2G00X0.Y0.
13124A3D.nc:G90G54.1P2G00X0.Y0.
13124A3E.nc:G90G54.1P2G00X0.Y0.
R126B17-1.nc:G90G54.1P1G00X0.Y0.
R126B17-2.nc:G90G54.1P1G00X0.Y0.
R126B17-3.nc:G90G54.1P1G00X0.Y0.
R126B17-4.nc:G90G54.1P1G00X0.Y0.
R126B17-5.nc:G90G54.1P1G00X0.Y0.

文本样本   附件:
http://pan.baidu.com/share/link? ... 44&uk=774360720
G54.1P"XX"  有时有多个并存,数值在 1~99
如果有多个并存 取开头就行。
1

评分人数

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

不能理解你的描述
最好给出一点源文本的样本 (也就是 含 G54.1P 的文本)
需要知道的是 G54.1P 在单行中是唯一的还是有多个并存
帮你的人了解越多 才能绕尽量少的弯

TOP

回复 2# terse


    好的 谢谢提醒,附件已经上传。还有G5.1PXX 是有共存的 。

TOP

本帖最后由 terse 于 2013-7-5 13:20 编辑

这样吗?
  1. @echo off&setlocal enabledelayedexpansion
  2. %1 %0 : |sort&pause&exit
  3. for /f "tokens=1* delims=:" %%i in ('findstr /ic:G54.1P *.nc') do (
  4.     set "str=%%j"
  5.     set str=!str:*G54.1P=!
  6.     echo !str:~,1! %%i
  7. )
复制代码
发出代码 才看到你的回复说 G5.1P 在一行里面有共存 上面代码不处理这样形式
另排序是按G5.1P 后一位排的

TOP

本帖最后由 lateol 于 2013-7-5 13:24 编辑

回复 4# terse


    是这样 ,不过 如果是G54.1P10  也会变成1?

TOP

本帖最后由 terse 于 2013-7-5 13:27 编辑

回复 5# lateol
主要不能确定 G54.1P后面有点有空格  有的没有
有空格的话 是否就取后面一列
没有空格的话 能确定后面是字符是固定G吗 还是有别的情况 这些都是要说明的
上面的代码要针对你的情况 做修正 你的情况越详细才会尽量的把代码完善一些

TOP

回复 6# terse


    常见固定 如
G54.1PXXG00X0Y0
G54.1PXX X0 Y0
G54.1PXX G00 X0. Y0.

TOP

回复 7# lateol
仅针对你的资料
  1. @echo off&setlocal enabledelayedexpansion
  2. %1 (for /f "tokens=*" %%i in ('%0 : ^|sort') do echo %%i)&pause&exit
  3. for /f "tokens=1* delims=:" %%i in ('findstr /ic:G54.1P *.nc') do (
  4.     set "str=%%j"
  5.     set str=!str:*G54.1P=!
  6.     for /f "delims=G " %%j in ("!str!") do set "str=     %%j"
  7.     echo !str:~-5! %%i
  8. )
  9.    
复制代码

TOP

回复 8# terse


    完美! 这个语句是什么?%1 (for /f "tokens=*" %%i in ('%0 : ^|sort') do echo %%i)&pause&exit
还有前面的%1  有何意义,set "str=     %%j"  中间要留空吗?
还有在处理下了 怎么做到排序的?再麻烦详解一下谢谢。

TOP

回复 9# lateol
%1 (......) 这里是第一次运行行 %0 后面因为有 :  所以相当于注释
空格 不能少 否则影响排序
倒序 在SORT 后加 /R

TOP

回复 10# terse
  1. @echo off
  2. cls
  3. for /l %%i in (1,1,3) do echo.
  4. color 1A
  5. ECHO         ┏━━━━━━━━━━━━━━━━━━━━┓
  6. ECHO          ┃                        ┃
  7. ECHO    ┏━━━━┫     当前选择: 有规则程序自动合成      ┣━━━━┓
  8. ECHO    ┃      ┃                       ┃      ┃
  9. ECHO    ┃       ┗━━━━━━━━━━━━━━━━━━━━┛      ┃
  10. echo     ┃                       ==处理说明↓==                       ┃
  11. echo.    ┃                                                            ┃
  12. ECHO    ┃    ┗━━直接按回车默认选择“==NC==”文件夹处理━━┛      ┃
  13. echo.    ┃                                                            ┃
  14. echo.    ┏------------------------------------------------------------┓
  15. echo     ┣    ★★★★★★====默认选择==NC==处理。====★★★★★★    ┫
  16. echo.    ┗------------------------------------------------------------┛
  17. echo.    ┃                                                            ┃
  18. echo.    ┣= 请保证该所有程序内刀具无重复即可完成处理=  【0查看说明】  ┫
  19. echo.    ┃                                                            ┃
  20. set /p DJFL=
  21. IF /I '%DJFL%'=='0' GOTO zdhcsm
  22. echo     ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
  23. echo     ┃              ===正在处理...以下为刀具信息!====            ┃
  24. pushd "==NC==\"
  25. @echo off&setlocal enabledelayedexpansion
  26. for /f "tokens=1,2* delims=:" %%i in ('findstr /ic:"TOOL NAME = " /c:"(Cutter Name:" /c:"( DIA. = " /c:"(  Dia:" /c:"(Tool Name:" *.nc') do (
  27.     if "!%%i!" == "" (
  28.        set "str="
  29.        if "%%k" == "" for /f "tokens=2-6 delims==,)" %%a in ("%%j") do (
  30.           if "%%c" =="" (
  31.              set D=%%a&set "R=%%b"
  32.           ) else set D=%%c&set "R=%%e"
  33.        ) else for /f "tokens=1-6 delims=:) " %%a in ("%%k") do (
  34.                    if "%%d" neq "" (
  35.                       set D=%%a&set "R=%%d"
  36.                    ) else set "str=%%a"
  37.                )
  38.                 if "!str!" == "" for %%f in (D R) do for /f %%h in ("!%%f!") do (
  39.                     set "%%f=%%h"
  40.                     for /l %%e in (1 1 6) do (
  41.                         if "!%%f:~-1!" == "0" set "%%f=!%%f:~,-1!"
  42.                     )
  43.                     if "!%%f!" neq "0." (
  44.                        if "!%%f:~-1!" == "." set "%%f=!%%f:~,-1!"
  45.                        if "!%%f!" neq "" set "%%f=%%f!%%f!"
  46.                     ) else set "%%f="
  47.                     set "str=!D!!R!"
  48.                 )
  49. ::==========================修正DxRx==========================
  50.                    set strD=!str:~0,1!
  51.                    if "!strD!" equ "R" (
  52.                   for /f "tokens=1 delims=R" %%h in ("!str!") do set /a strJS=%%h*"2"
  53.                   set str=D!strJS!!str!
  54. )
  55. ::==========================此为按规则合并参数========================
  56.                     md "!str!" 2>nul
  57.                     set "f=%%~ni"
  58.                     set "f=!f:~-2!"
  59.                     set s=-G
  60.                     for %%a in (A R1 F1 -1) do if "!f:%%a=!" neq "!f!" set "s="
  61.                     if not exist "1-!str!!s!.lat" cd.>"1-!str!!s!.lat"
  62. %1 (for /f "tokens=*" %%l in ('%0 : ^|sort') do echo %%l)&pause&exit
  63.                  for /f "tokens=* delims=:" %%l in ('findstr /ic:G54.1P %%i') do (
  64.                  set "str=%%l"
  65.                 set str=!str:*G54.1P=!
  66.                 for /f "delims=G " %%l in ("!str!") do set "str=     %%l"
  67.                        echo !str:~-5!  %%i>>1-!str!!s!.lat
  68.     )
  69.   )
  70. )
  71. echo     ┠──────────────────────────────┨
  72. echo     ┃               ===【刀具分类模拟完成!】===                 ┃
  73. ECHO     ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
  74. pause
复制代码
是 %1 (for /f "tokens=*" %%l in ('%0 : ^|sort') do echo %%l)&pause&exit 这段代码吗?出现内部命令。。。还是不明白这段代码的工作原理。可以给个相关资料看看么?谢谢。代码很深奥 呵呵。

TOP

本帖最后由 terse 于 2013-7-5 15:05 编辑

这样肯定是出错的 写入的话 这样插人试
  1. (for /f "tokens=* delims=:" %%l in ('findstr /ic:G54.1P %%i') do (
  2.     set "var=%%l"
  3.     for /f "delims=G " %%l in ("!var:*G54.1P=!") do set "var= %%l"
  4.         echo !var:~-3!  %%i
  5. ))>$.e
  6. >$.t sort <$.e
  7. (for /f "tokens=*" %%l in ($.t) do echo %%l)>>1-!str!!s!.lat
复制代码
代码最后 写上 del $.?

TOP

回复 12# terse


    再次感谢,,多了两个临时文件 $.e  $.t   处理出来的怎么会是倒序的呢?

TOP

不是有 代码最后 写上 del $.? 吗
倒序问题暂时还不清楚 代码顺序排列

TOP

回复 14# terse


    成这样了  
10  002H12-F2.nc
11  002H12-F2.nc
10  002H12-F2.nc
11  002H12-F2.nc
5  002H12-R2.nc
6  002H12-R2.nc
5  002H12-R2.nc
6  002H12-R2.nc
3  13124A1B.nc
4  13124A1BB.nc
2  13124A3B.nc
1  R126B17-3.nc

TOP

返回列表