标题: [文本处理] 【已解决】批处理for命令之后的变量该怎么写? [打印本页]
作者: nnszuo 时间: 2014-11-11 14:29 标题: 【已解决】批处理for命令之后的变量该怎么写?
本帖最后由 nnszuo 于 2014-11-12 18:06 编辑
下面这个批处理最后一个echo的结果应该是5 5555555,是哪里出错了,该怎么写- @echo off
- (
- echo 1111111
- echo 2222222
- echo 3333333
- echo 4444444
- echo 5555555
- )>6.txt
- setlocal enabledelayedexpansion
- set t=0
- for /f "delims=" %%c in ('findstr /v "kk" 6.txt') do (
- set /a t+=1
- set %t%=%%c
- echo !t! !%t%!
- )
- echo !t! !%t%!
- pause
复制代码
这个批处理的全部代码是这样的- @echo off
- (
- echo 1111111
- echo 2222222
- echo 3333333
- echo 4444444
- echo 5555555
- )>6.txt
- (
- echo 6666666
- echo 7777777
- echo 8888888
- echo 9999999
- echo 0000000
- )>7.txt
- setlocal enabledelayedexpansion
- set t=0
- set y=100
- for /f "delims=" %%c in ('findstr /v "kk" 6.txt') do (
- set /a t+=1
- set %t%=%%c
- echo !t! !%t%!
- )
- for /f "delims=" %%i in ('findstr /v "kk" 7.txt') do (
- set /a y+=1
- set %y%=%%i
- echo !y! !%y%!
- )
- cd.>8.txt
- if not "!t!"=="0" (
- echo !%t%! !%y%! >>8.txt
- set /a t-=1
- set /a y-=1
- )
- pause
复制代码
用数字作为变量是方便后续调用,以前写了个批量拖拽重命名批处理,其中部分代码是下面内容,没想到用了for命令后变量无法正常调用了,amwfjhh提供的call 可以解决这个问题,不知道有没有其他思路- @echo off
- setlocal EnableDelayedExpansion
- if "%~f1"=="" exit
- cd /d "%~dp1"
- set s=1
- set %s%=%~f1
-
-
- :a
- if not exist "%~f1" (goto s)
- set/a s+=1
- set %s%=%~f1
- shift /1&goto :a
-
- :s
- if not "%s%"=="0" (
- echo !%s%!
- set/a s-=1
- goto :s
- )
- pause
复制代码
作者: amwfjhh 时间: 2014-11-11 18:00
- @echo off
- (
- echo 1111111
- echo 2222222
- echo 3333333
- echo 4444444
- echo 5555555
- )>6.txt
- setlocal enabledelayedexpansion
- set t=0
- for /f "delims=" %%c in ('findstr /v "kk" 6.txt') do (
- set /a t+=1
- set line!t!=%%c
- call echo line!t! %%line!t!%%
- )
- call echo line!t! %%line!t!%%
- pause
复制代码
作者: apang 时间: 2014-11-11 21:28
也可以用 for- for %%a in (line!t!) do echo !t! !%%a!
复制代码
不建议用纯数字作为变量名
作者: rogue_1983 时间: 2014-11-11 21:52
本帖最后由 rogue_1983 于 2014-11-11 22:20 编辑
- @echo off
- (
- echo 1111111
- echo 2222222
- echo 3333333
- echo 4444444
- echo 5555555
- )>6.txt
- setlocal enabledelayedexpansion
- set t=0
- for /f "delims=" %%c in ('findstr /v "kk" 6.txt') do (
- set /a t+=1
- set %t%=%%c
- echo !t! !%t%!
- set var=!%t%!
- )
- echo !t! %var%
- pause
复制代码
作者: amwfjhh 时间: 2014-11-12 00:02
照楼主的写法,最后一句因该写为:复制代码
就可以得到正确的结果了。因为FOR循环里面一直是在set 0=%%c
作者: nnszuo 时间: 2014-11-12 10:03
本帖最后由 nnszuo 于 2014-11-12 10:29 编辑
回复 2# amwfjhh
变量5是解决了,我有新的问题就是变量5之前的变量该怎么写我后续还要调用的
详细请看上面更新内容
回复 3# apang
用数字作为变量是因可以累加和方便后续调用
详细请看上面更新内容
回复 4# rogue_1983
变量5是解决了,我有新的问题就是变量5之前的变量该怎么写我后续还要调用的
详细请看上面更新内容
作者: DAIC 时间: 2014-11-12 10:40
回复 6# nnszuo
把你的完整代码和完整需求全部说出来,不要等到别人给你解决一个问题然后你又冒出一个新的问题。
作者: nnszuo 时间: 2014-11-12 11:36
本帖最后由 nnszuo 于 2014-11-12 12:54 编辑
回复 7# DAIC
好的,感谢提醒
amwfjhh提供的call 可以解决这个问题,不知道有没有其他思路- @echo off
- (
- echo 1111111
- echo 2222222
- echo 3333333
- echo 4444444
- echo 5555555
- )>6.txt
- (
- echo 6666666
- echo 7777777
- echo 8888888
- echo 9999999
- echo 0000000
- )>7.txt
- setlocal enabledelayedexpansion
- set t=0
- for /f "delims=" %%c in ('findstr /v "kk" 6.txt') do (
- set /a t+=1
- set !t!=%%c
- )
- set y=100
- for /f "delims=" %%g in ('findstr /v "kk" 7.txt') do (
- set /a y+=1
- set !y!=%%g
- )
-
- :k
- if not "!t!"=="0" (
- call echo !%t%! !%y%!
- set /a y-=1
- set /a t-=1
- goto :k
- )
- pause
复制代码
apang提供的for可以解决变量的文件,如果如果两个变量就会出错不知道是什么原因- @echo off
- (
- echo 1111111
- echo 2222222
- echo 3333333
- echo 4444444
- echo 5555555
- )>6.txt
- (
- echo 6666666
- echo 7777777
- echo 8888888
- echo 9999999
- echo 0000000
- )>7.txt
- setlocal enabledelayedexpansion
- set t=0
- for /f "delims=" %%c in ('findstr /v "kk" 6.txt') do (
- set /a t+=1
- set !t!=%%c
- )
- set y=100
- for /f "delims=" %%g in ('findstr /v "kk" 7.txt') do (
- set /a y+=1
- set !y!=%%g
- )
- :k
- if not "!y!"=="100" (
- for %%z in (!y!) do echo !%%z!
- set /a y-=1
- goto :k
- )
- :u
- if not "!t!"=="0" (
- for %%z in (!t!) do echo !%%z!
- set /a t-=1
- goto :u
- )
- pause
复制代码
- :k
- if not "!y!"=="100" (
- for %%z in (!y!!t!) do echo !%%z!
- set /a y-=1
- goto :k
- )
复制代码
作者: xxpinqz 时间: 2014-11-12 12:14
结果要求什么,看不太懂,!y!!z!之间要用空格分开:- :k
- if not "!y!"=="100" (
- for %%z in (!y! !t!) do echo %%z !%%z!
- set /a y-=1,t-=1
- goto :k
- )
复制代码
作者: nnszuo 时间: 2014-11-12 12:49
本帖最后由 nnszuo 于 2014-11-12 12:51 编辑
结果就像这个一样并排显示,用空格隔开的话还是单排显示的- @echo off
- (
- echo 1111111
- echo 2222222
- echo 3333333
- echo 4444444
- echo 5555555
- )>6.txt
- (
- echo 6666666
- echo 7777777
- echo 8888888
- echo 9999999
- echo 0000000
- )>7.txt
- setlocal enabledelayedexpansion
- set t=0
- for /f "delims=" %%c in ('findstr /v "kk" 6.txt') do (
- set /a t+=1
- set !t!=%%c
- )
- set y=100
- for /f "delims=" %%g in ('findstr /v "kk" 7.txt') do (
- set /a y+=1
- set !y!=%%g
- )
-
- :k
- if not "!t!"=="0" (
- call echo !%t%! !%y%!
- set /a y-=1
- set /a t-=1
- goto :k
- )
- pause
复制代码
作者: apang 时间: 2014-11-12 16:39
回复 10# nnszuo
这样?- @echo off
- (
- echo 1111111
- echo 2222222
- echo 3333333
- echo 4444444
- echo 5555555
- )>6.txt
- (
- echo 6666666
- echo 7777777
- echo 8888888
- echo 9999999
- echo 0000000
- )>7.txt
- setlocal enabledelayedexpansion
- set t=0
- for /f "delims=" %%c in ('findstr /v "kk" 6.txt') do (
- set /a t+=1
- set "_!t!=%%c"
- )
- set y=0
- for /f "delims=" %%g in ('findstr /v "kk" 7.txt') do (
- set /a y+=1
- set "#!y!=%%g"
- )
-
- set "MaxLine=!t!"
- Rem if !y! gtr !t! (set MaxLine=!y!)
- for /l %%a in (!MaxLine! -1 1) do echo,!_%%a! !#%%a!
- pause
复制代码
作者: nnszuo 时间: 2014-11-12 18:06
就是这种了,非常感谢!
谢谢各位了
欢迎光临 批处理之家 (http://bathome.net./) |
Powered by Discuz! 7.2 |