标题:
[已结]set 的变量赋值在for里面怎么实现啊?
[打印本页]
作者:
persiancat
时间:
2006-5-6 19:09
标题:
[已结]set 的变量赋值在for里面怎么实现啊?
文本中有以下内容:
第一百零二回 北饮狂刀 [30]
第一百零一回 杀麟求路 [29]
我想取得 “第**回”到环境变量str再进行处理,可是每次都是运行完才取到最后一行的变量赋值
显示如下:
kkkkkkr 第一百零二回
kkkkkkr 第一百零一回
第一百零一回
代码如下:
set file=%1
set str=kkkkkkr
for /f "tokens=1,2*" %%i in ('findstr "第" %file%') do (
set str=%%i
echo %str% %%i
)
echo %str%
请问我该怎么处理呢?
[
Last edited by willsort on 2006-5-11 at 16:03
]
作者:
Jneny
时间:
2006-5-6 19:15
不是太明白
作者:
persiancat
时间:
2006-5-7 00:51
就是每次在文本中取得一行中的前面几个字符串,并赋值给str(以后又别的用途,我没在这里说明),如先取文本第一行“第一百零二回 北饮狂刀 [30] ”的“第一百零二回”给str,再去文本第二行“第一百零一回 杀麟求路 [29] ”的“第一百零一回”给str
我上面的代码期望输出是:
第一百零二回 第一百零二回
第一百零一回 第一百零一回
第一百零一回
即我的期望是str和%%i 的值是相等的,但在for里面显示的str的值都是它的初始值kkkkkkr,只有在最后的时候才将str赋值为文本最后一行的前面几个字符
我该怎么该才能实现for中的str变量赋值呢?
作者:
Wengier
时间:
2006-5-7 05:52
对于批处理问题,不妨发到论坛的批处理版块中,那里有不少批处理高手。
作者:
persiancat
时间:
2006-5-7 08:28
标题:
求助:set 的变量赋值在for里面怎么实现阿?
文本中有以下两行内容:
第一百零二回 北饮狂刀 [30]
第一百零一回 杀麟求路 [29]
写了以下代码:
set file=%1
set str=kkkkkkr
for /f "tokens=1,2*" %%i in ('findstr "第" %file%') do (
set str=%%i
echo %str% %%i
)
echo %str%
我想取得 “第**回”到环境变量str再进行处理,可是每次都是运行完才取到最后一行的变量赋值
显示如下:
kkkkkkr 第一百零二回
kkkkkkr 第一百零一回
第一百零一回
我上面的代码期望输出是:
第一百零二回 第一百零二回
第一百零一回 第一百零一回
第一百零一回
即我的期望是str和%%i 的值是相等的,但在for里面显示的str的值都是它的初始值kkkkkkr,只有在最后的时候才将str赋值为文本最后一行的前面几个字符
我该怎么该才能实现for中的str变量赋值呢?
作者:
persiancat
时间:
2006-5-7 09:58
在 [已结]百思不解,关于for……一贴找到了
willsort
版主
Batchinger
积分 3317
发帖 1163
注册 2002-10-18
状态 离线 『第 3 楼』:
Re arding:
完成你所需要的功能需要使用新的变量定界符 ! ,要使用这个定界符,需要启动延缓变量扩展,通过 cmd /v:on 或者 setlocal EnableDelayedExpansion 来实现。这些内容,过去的主题中也有不少讨论,可以全文搜索一下。或者直接查看 cmd / setlocal / for
的命令行帮助,下面是你的程序修改后的代码。
CODE: [Copy to clipboard]
--------------------------------------------------------------------------------
@echo off & setlocal EnableDelayedExpansion
set var1=00000000000000000
for /f %%i in (fl.txt) do set var1=%%i && echo !var1!
echo %var1%
pause
:P我将原代码改了也行了:
setlocal EnableDelayedExpansion
set file=%1
set str=kkkkkkr
for /f "tokens=1,2*" %%i in ('findstr "第" %file%') do (
set str=%%i
echo !str! %%i
)
echo %str%
endlocal
但不懂为什么要这样做呢?变量定界符 !有什么作用的? !~!和%~%有什么区别
[
Last edited by persiancat on 2006-5-7 at 10:00
]
作者:
3742668
时间:
2006-5-7 12:46
个人观点:
批处理(不妨叫它cmd1)中的for命令,应该是在cmd的另外一个实例(不妨叫它cmd2)中被解释运行(或者理解为新开了个cmd.exe来解释运行for命令,而且这个程序是在后台运行的),由于不同的实例之间的变量是不能互相访问的,所以在cmd1中调用cmd2中的变量是行不通的,这就相当于在cmd.exe中运行某个程序,你可以调用它的参数,而不能调用它的变量。但是在实际应用中有时候cmd1又需要调用cmd2的变量,windows为这种情况准备一个命令就是setlocal EnableDelayedExpansion了。
至于!与%的区别,可以这么理解:
!表示按地址访问
%表示按参数访问
从小到大语文老师都不漂亮,唉....
作者:
chineselgs
时间:
2006-5-7 20:32
标题:
去批处理坛里发一下,那里高手多啊~~
作者:
无奈何
时间:
2006-5-8 00:24
对于你的问题,一种方法是启用延迟环境变量,SETLOCAL ENABLEDELAYEDEXPANSION,需要将变量引用符“%” 替换为“!”具体参见 set /?;另一种方法是从 for 中调用函数。
例1:
Quote:
@echo
off
SETLOCAL
ENABLEDELAYEDEXPANSION
set
file=
%1
set
str=kkkkkkr
for
/f
"tokens=1,2*"
%%i
in
(
'f
in
dstr "第"
%file%
'
)
do
(
set
str=
%%i
echo
.
!str!
%%j
rem 可以对 str 进行处理。
set
str=
!str!
$
echo
.
!str!
)
-=代码着色 BY:无奈何=-
例2:
Quote:
@echo
off
set
file=
%1
set
str=kkkkkkr
for
/f
"tokens=1,2*"
%%i
in
(
'f
in
dstr "第"
%file%
'
)
do
(
call
:fun
%%i
%%j
)
goto
:EOF
:fun
set
str=
%1
rem 可以对 str 进行处理。
set
str=
%str%
$
echo
.
%str%
%2
goto
:EOF
-=代码着色 BY:无奈何=-
作者:
doscc
时间:
2006-5-8 12:59
学习中....
作者:
willsort
时间:
2006-6-22 09:13
───────────────── 版务记录 ─────────────────
执行:Will Sort
操作:合并主题 {20503}求助:set 的变量赋值在for里面怎么实现阿? -> 5,6,7 楼
说明:重复主题存在不重复的回复
处罚:因属论坛新人,不予积分处罚
提示:请访问 {7326}
论坛新手必读,所有人的基本行为准则[转帖]
───────────────── 版务记录 ─────────────────
Re All:
关于环境变量延迟扩展,我的个人理解如下:
[1] 什么情况下该使用变量延迟?
http://www.cn-dos.net/forum/viewthread.php?tid=20733
欢迎光临 中国DOS联盟论坛 (http://cndos.fam.cx/forum/)
Powered by Discuz! 2.5