call %%f
type %%f
del V_TABLE ;这是INI目录下的批处理所设置的环境变量
)
其中的%%f 是在INI目录下的几个批处理文件,这些文件都是对设置环境用的.
但是如上所写的话,在当前的批处理文件中无法访问INI目录下批处理文件所设置的环境变量.
上面是举个例子,实际要求是FOR循环中的命令必须对INI目录下的批处理文件所设定的环境变量进行操作.
23 个解决方案
#1
用GOTO语句
#2
不是开玩笑吧. goto 好象是跳转语句,不可能跳到另一个文件中吧.而且上面写的是顺序的,不需要有分支!
#3
up
#4
这帖子移到编程的版块去可能会好点哦
#5
把思路说详细点点,晚上来看,有事情要出去了。。。
嘿嘿
嘿嘿
#6
不知語法是怎樣的,學習下!
#7
del V_TABLE ;这是INI目录下的批处理所设置的环境变量
^^^^^^^^^^^^^^^^^^^^^^^^
这个明明就不是环境变量,你究竟要做什么?
^^^^^^^^^^^^^^^^^^^^^^^^
这个明明就不是环境变量,你究竟要做什么?
#8
也不算是环境变量,只是我想在INI目录中的批处理文件中设置变量(我不大清楚关于批处理中有关变量的设置).类似于
set a=b
set c=d
然后我要在FOR循环中对a和c的值进行处理,而且是要用多个命令对a 和 c 的值进行处理.
现在的问题是如果在FOR中用()来包含循环体,那么在FOR的循环过程中,a和c无法取值.如果用 & 和 ^ 连接作为一条语句(我不大清楚是不是一条语句),无法进行循环,只有第一个文件能得到处理.
上面的 del 写错了.应该是del %V_TABLE%
set a=b
set c=d
然后我要在FOR循环中对a和c的值进行处理,而且是要用多个命令对a 和 c 的值进行处理.
现在的问题是如果在FOR中用()来包含循环体,那么在FOR的循环过程中,a和c无法取值.如果用 & 和 ^ 连接作为一条语句(我不大清楚是不是一条语句),无法进行循环,只有第一个文件能得到处理.
上面的 del 写错了.应该是del %V_TABLE%
#9
如果是用批处理,考虑在中间建立临时文件进行处理
思路这样:
echo SET A=b >_TMP.BAT
echo SET C=d >>_TMP.BAT
echo rem do something here...
call _TMP.BAT
sleep 1
del _TMP.BAT
.............
中间的处理可能要根据你的情况发生更多的变化
思路这样:
echo SET A=b >_TMP.BAT
echo SET C=d >>_TMP.BAT
echo rem do something here...
call _TMP.BAT
sleep 1
del _TMP.BAT
.............
中间的处理可能要根据你的情况发生更多的变化
#10
我要做的是根据目录中的文件个数循环执行N条命令,就是目录里有多少个文件就要执行多少次循环,而且每次循环都要执行N条命令.而其中一条命令就是调用目录中的文件进行变量赋值(这些文件就是赋值用的).然后在剩余的命令中使用这些值.
#11
你可以不用在循环里面执行命令,可以考虑利用循环建立一个临时批处理文件,建立好以后,再执行这个临时批处理
#12
好象不成.INI目录下的每个文件都是对变量A和C进行赋值,只是值不同,然后在主批处理中对这些值进行统一的命令处理.
我原来的做法是每个文件都有一个完整的功能,但是所有的文件的功能都相同,只是部分变量所要改变罢了.我现在想做的就是把相同的东西抽取出来放在主批处理中,把不同的东西设置成变量放在同一目录下的不同子批处理文件中.然后在主批处理中进行对目录的循环,每CALL一个子批处理就进行一些命令处理.
我原来的做法是每个文件都有一个完整的功能,但是所有的文件的功能都相同,只是部分变量所要改变罢了.我现在想做的就是把相同的东西抽取出来放在主批处理中,把不同的东西设置成变量放在同一目录下的不同子批处理文件中.然后在主批处理中进行对目录的循环,每CALL一个子批处理就进行一些命令处理.
#13
假设两个批处理:
a.bat
^^^^^^^^
@echo off
set a=c
set b=d
call b.bat
------------
b.bat
^^^^^^^^^^
@echo off
echo %a%
echo %b%
结果是b.bat可以处理a.bat里面的环境变量的,不知道你要如何操作?
a.bat
^^^^^^^^
@echo off
set a=c
set b=d
call b.bat
------------
b.bat
^^^^^^^^^^
@echo off
echo %a%
echo %b%
结果是b.bat可以处理a.bat里面的环境变量的,不知道你要如何操作?
#14
反了,是这样的.
a.bat
^^^^^^^^
@echo off
FOR %%f IN (INI\*.BAT) DO (
call %%f ;这个就是call b.bat,只是b.bat名字不是固定的,
echo %a% ;这样写的话,这里取不到a和b的值
echo %b%
)
------------
b.bat
^^^^^^^^^^
@echo off
set a=c
set b=d
a.bat
^^^^^^^^
@echo off
FOR %%f IN (INI\*.BAT) DO (
call %%f ;这个就是call b.bat,只是b.bat名字不是固定的,
echo %a% ;这样写的话,这里取不到a和b的值
echo %b%
)
------------
b.bat
^^^^^^^^^^
@echo off
set a=c
set b=d
#15
?我这里也可以啊
c.bat
^^^^
@echo off
call b.bat
echo a = %a%
echo b = %b%
----------
b.bat
^^^^^^^^^^
@echo off
set a=c
set b=d
c.bat
^^^^
@echo off
call b.bat
echo a = %a%
echo b = %b%
----------
b.bat
^^^^^^^^^^
@echo off
set a=c
set b=d
#16
可是放在FOR循环的括号里就不可以了...
#17
你看过FOR运行的结果吗?
==========================
C:\>e
C:\>FOR %f IN (INI\*.BAT) DO (
call %f
echo a= "the d.bat"
echo b= "THE D.BAT"
sleep 1
)
C:\>(
call INI\c.bat
echo a= "the d.bat"
echo b= "THE D.BAT"
sleep 1
)
C:\>echo call c.bat
call c.bat
C:\>set a=c
C:\>set b=d
C:\>rem call d.bat
a= "the d.bat"
b= "THE D.BAT"
C:\>(
call INI\d.bat
echo a= "the d.bat"
echo b= "THE D.BAT"
sleep 1
)
C:\>echo call d.bat
call d.bat
C:\>set a="the d.bat"
C:\>set b="THE D.BAT"
C:\>rem call d.bat
a= "the d.bat"
b= "THE D.BAT"
C:\>
%%%%%%%%%%%%%%%%%%%%
单独运行的时候的确可以,但是如果有多个.bat的时候,环境变量成了最后一个执行的那个了。这就是说,你的思路是不可行的,因为电脑不允许这么操作
==========================
C:\>e
C:\>FOR %f IN (INI\*.BAT) DO (
call %f
echo a= "the d.bat"
echo b= "THE D.BAT"
sleep 1
)
C:\>(
call INI\c.bat
echo a= "the d.bat"
echo b= "THE D.BAT"
sleep 1
)
C:\>echo call c.bat
call c.bat
C:\>set a=c
C:\>set b=d
C:\>rem call d.bat
a= "the d.bat"
b= "THE D.BAT"
C:\>(
call INI\d.bat
echo a= "the d.bat"
echo b= "THE D.BAT"
sleep 1
)
C:\>echo call d.bat
call d.bat
C:\>set a="the d.bat"
C:\>set b="THE D.BAT"
C:\>rem call d.bat
a= "the d.bat"
b= "THE D.BAT"
C:\>
%%%%%%%%%%%%%%%%%%%%
单独运行的时候的确可以,但是如果有多个.bat的时候,环境变量成了最后一个执行的那个了。这就是说,你的思路是不可行的,因为电脑不允许这么操作
#18
我看过的.在BAT运行的时候,我看到的是子批处理文件中的变量有执行,并且变量也值在环境中,但是在FOR的循环内却访问不到.运行结束后再看一下环境变量,所设定的值都在.
可能FOR真不允许这么用吧!
可能FOR真不允许这么用吧!
#19
谢谢你的答复,我还是另想办法吧.
#20
不,你看到没有,变量在第一个运行的时候已经变了,不再是变量了,成了常量。
C:\>e
C:\>FOR %f IN (INI\*.BAT) DO (
call %f
echo a= "the d.bat" <--------------
echo b= "THE D.BAT"
sleep 1
)
……………………
这里。。。。
原句是:echo a=%a%
可是执行过后,%a%,已经不存在了,所以每个循环也不能改变
C:\>e
C:\>FOR %f IN (INI\*.BAT) DO (
call %f
echo a= "the d.bat" <--------------
echo b= "THE D.BAT"
sleep 1
)
……………………
这里。。。。
原句是:echo a=%a%
可是执行过后,%a%,已经不存在了,所以每个循环也不能改变
#21
你用的是什么系统,我的是2000Server,我运行的结果和你的不一样....我显示的运行过程
echo a= "the d.bat"
echo b= "THE D.BAT"
这里一直都是空的.
echo a=
echo b=
还有就是sleep是干什么用的,看名字好象是暂停一段时间,可是我的系统不支持这个命令!
echo a= "the d.bat"
echo b= "THE D.BAT"
这里一直都是空的.
echo a=
echo b=
还有就是sleep是干什么用的,看名字好象是暂停一段时间,可是我的系统不支持这个命令!
#22
我一样的win2k with last service pack + all hotfixes
sleep是resource kit里面的
sleep是resource kit里面的
#23
奇怪了,不同的机器竟有不同的结果。我还是用别的吧。这样兼容性可不好。
谢谢。。。
可是怎么结贴啊。我给分的时候它老说加复数大于给分数.
谢谢。。。
可是怎么结贴啊。我给分的时候它老说加复数大于给分数.
#1
用GOTO语句
#2
不是开玩笑吧. goto 好象是跳转语句,不可能跳到另一个文件中吧.而且上面写的是顺序的,不需要有分支!
#3
up
#4
这帖子移到编程的版块去可能会好点哦
#5
把思路说详细点点,晚上来看,有事情要出去了。。。
嘿嘿
嘿嘿
#6
不知語法是怎樣的,學習下!
#7
del V_TABLE ;这是INI目录下的批处理所设置的环境变量
^^^^^^^^^^^^^^^^^^^^^^^^
这个明明就不是环境变量,你究竟要做什么?
^^^^^^^^^^^^^^^^^^^^^^^^
这个明明就不是环境变量,你究竟要做什么?
#8
也不算是环境变量,只是我想在INI目录中的批处理文件中设置变量(我不大清楚关于批处理中有关变量的设置).类似于
set a=b
set c=d
然后我要在FOR循环中对a和c的值进行处理,而且是要用多个命令对a 和 c 的值进行处理.
现在的问题是如果在FOR中用()来包含循环体,那么在FOR的循环过程中,a和c无法取值.如果用 & 和 ^ 连接作为一条语句(我不大清楚是不是一条语句),无法进行循环,只有第一个文件能得到处理.
上面的 del 写错了.应该是del %V_TABLE%
set a=b
set c=d
然后我要在FOR循环中对a和c的值进行处理,而且是要用多个命令对a 和 c 的值进行处理.
现在的问题是如果在FOR中用()来包含循环体,那么在FOR的循环过程中,a和c无法取值.如果用 & 和 ^ 连接作为一条语句(我不大清楚是不是一条语句),无法进行循环,只有第一个文件能得到处理.
上面的 del 写错了.应该是del %V_TABLE%
#9
如果是用批处理,考虑在中间建立临时文件进行处理
思路这样:
echo SET A=b >_TMP.BAT
echo SET C=d >>_TMP.BAT
echo rem do something here...
call _TMP.BAT
sleep 1
del _TMP.BAT
.............
中间的处理可能要根据你的情况发生更多的变化
思路这样:
echo SET A=b >_TMP.BAT
echo SET C=d >>_TMP.BAT
echo rem do something here...
call _TMP.BAT
sleep 1
del _TMP.BAT
.............
中间的处理可能要根据你的情况发生更多的变化
#10
我要做的是根据目录中的文件个数循环执行N条命令,就是目录里有多少个文件就要执行多少次循环,而且每次循环都要执行N条命令.而其中一条命令就是调用目录中的文件进行变量赋值(这些文件就是赋值用的).然后在剩余的命令中使用这些值.
#11
你可以不用在循环里面执行命令,可以考虑利用循环建立一个临时批处理文件,建立好以后,再执行这个临时批处理
#12
好象不成.INI目录下的每个文件都是对变量A和C进行赋值,只是值不同,然后在主批处理中对这些值进行统一的命令处理.
我原来的做法是每个文件都有一个完整的功能,但是所有的文件的功能都相同,只是部分变量所要改变罢了.我现在想做的就是把相同的东西抽取出来放在主批处理中,把不同的东西设置成变量放在同一目录下的不同子批处理文件中.然后在主批处理中进行对目录的循环,每CALL一个子批处理就进行一些命令处理.
我原来的做法是每个文件都有一个完整的功能,但是所有的文件的功能都相同,只是部分变量所要改变罢了.我现在想做的就是把相同的东西抽取出来放在主批处理中,把不同的东西设置成变量放在同一目录下的不同子批处理文件中.然后在主批处理中进行对目录的循环,每CALL一个子批处理就进行一些命令处理.
#13
假设两个批处理:
a.bat
^^^^^^^^
@echo off
set a=c
set b=d
call b.bat
------------
b.bat
^^^^^^^^^^
@echo off
echo %a%
echo %b%
结果是b.bat可以处理a.bat里面的环境变量的,不知道你要如何操作?
a.bat
^^^^^^^^
@echo off
set a=c
set b=d
call b.bat
------------
b.bat
^^^^^^^^^^
@echo off
echo %a%
echo %b%
结果是b.bat可以处理a.bat里面的环境变量的,不知道你要如何操作?
#14
反了,是这样的.
a.bat
^^^^^^^^
@echo off
FOR %%f IN (INI\*.BAT) DO (
call %%f ;这个就是call b.bat,只是b.bat名字不是固定的,
echo %a% ;这样写的话,这里取不到a和b的值
echo %b%
)
------------
b.bat
^^^^^^^^^^
@echo off
set a=c
set b=d
a.bat
^^^^^^^^
@echo off
FOR %%f IN (INI\*.BAT) DO (
call %%f ;这个就是call b.bat,只是b.bat名字不是固定的,
echo %a% ;这样写的话,这里取不到a和b的值
echo %b%
)
------------
b.bat
^^^^^^^^^^
@echo off
set a=c
set b=d
#15
?我这里也可以啊
c.bat
^^^^
@echo off
call b.bat
echo a = %a%
echo b = %b%
----------
b.bat
^^^^^^^^^^
@echo off
set a=c
set b=d
c.bat
^^^^
@echo off
call b.bat
echo a = %a%
echo b = %b%
----------
b.bat
^^^^^^^^^^
@echo off
set a=c
set b=d
#16
可是放在FOR循环的括号里就不可以了...
#17
你看过FOR运行的结果吗?
==========================
C:\>e
C:\>FOR %f IN (INI\*.BAT) DO (
call %f
echo a= "the d.bat"
echo b= "THE D.BAT"
sleep 1
)
C:\>(
call INI\c.bat
echo a= "the d.bat"
echo b= "THE D.BAT"
sleep 1
)
C:\>echo call c.bat
call c.bat
C:\>set a=c
C:\>set b=d
C:\>rem call d.bat
a= "the d.bat"
b= "THE D.BAT"
C:\>(
call INI\d.bat
echo a= "the d.bat"
echo b= "THE D.BAT"
sleep 1
)
C:\>echo call d.bat
call d.bat
C:\>set a="the d.bat"
C:\>set b="THE D.BAT"
C:\>rem call d.bat
a= "the d.bat"
b= "THE D.BAT"
C:\>
%%%%%%%%%%%%%%%%%%%%
单独运行的时候的确可以,但是如果有多个.bat的时候,环境变量成了最后一个执行的那个了。这就是说,你的思路是不可行的,因为电脑不允许这么操作
==========================
C:\>e
C:\>FOR %f IN (INI\*.BAT) DO (
call %f
echo a= "the d.bat"
echo b= "THE D.BAT"
sleep 1
)
C:\>(
call INI\c.bat
echo a= "the d.bat"
echo b= "THE D.BAT"
sleep 1
)
C:\>echo call c.bat
call c.bat
C:\>set a=c
C:\>set b=d
C:\>rem call d.bat
a= "the d.bat"
b= "THE D.BAT"
C:\>(
call INI\d.bat
echo a= "the d.bat"
echo b= "THE D.BAT"
sleep 1
)
C:\>echo call d.bat
call d.bat
C:\>set a="the d.bat"
C:\>set b="THE D.BAT"
C:\>rem call d.bat
a= "the d.bat"
b= "THE D.BAT"
C:\>
%%%%%%%%%%%%%%%%%%%%
单独运行的时候的确可以,但是如果有多个.bat的时候,环境变量成了最后一个执行的那个了。这就是说,你的思路是不可行的,因为电脑不允许这么操作
#18
我看过的.在BAT运行的时候,我看到的是子批处理文件中的变量有执行,并且变量也值在环境中,但是在FOR的循环内却访问不到.运行结束后再看一下环境变量,所设定的值都在.
可能FOR真不允许这么用吧!
可能FOR真不允许这么用吧!
#19
谢谢你的答复,我还是另想办法吧.
#20
不,你看到没有,变量在第一个运行的时候已经变了,不再是变量了,成了常量。
C:\>e
C:\>FOR %f IN (INI\*.BAT) DO (
call %f
echo a= "the d.bat" <--------------
echo b= "THE D.BAT"
sleep 1
)
……………………
这里。。。。
原句是:echo a=%a%
可是执行过后,%a%,已经不存在了,所以每个循环也不能改变
C:\>e
C:\>FOR %f IN (INI\*.BAT) DO (
call %f
echo a= "the d.bat" <--------------
echo b= "THE D.BAT"
sleep 1
)
……………………
这里。。。。
原句是:echo a=%a%
可是执行过后,%a%,已经不存在了,所以每个循环也不能改变
#21
你用的是什么系统,我的是2000Server,我运行的结果和你的不一样....我显示的运行过程
echo a= "the d.bat"
echo b= "THE D.BAT"
这里一直都是空的.
echo a=
echo b=
还有就是sleep是干什么用的,看名字好象是暂停一段时间,可是我的系统不支持这个命令!
echo a= "the d.bat"
echo b= "THE D.BAT"
这里一直都是空的.
echo a=
echo b=
还有就是sleep是干什么用的,看名字好象是暂停一段时间,可是我的系统不支持这个命令!
#22
我一样的win2k with last service pack + all hotfixes
sleep是resource kit里面的
sleep是resource kit里面的
#23
奇怪了,不同的机器竟有不同的结果。我还是用别的吧。这样兼容性可不好。
谢谢。。。
可是怎么结贴啊。我给分的时候它老说加复数大于给分数.
谢谢。。。
可是怎么结贴啊。我给分的时候它老说加复数大于给分数.