Board logo

标题: [文本处理] 批处理直接双击运行与命令行下运行的区别? [打印本页]

作者: nomaze    时间: 2011-6-29 14:30     标题: 批处理直接双击运行与命令行下运行的区别?

求问:写了一个小文件,内容如下
@echo off
for /f "delims=" %%i in (22.text) do (if not defined %%i set %%i=A && echo %%i>>33.text)
pause

双击该.bat文件时运行正常,产生了33.txt文件
但是在命令行下运行时,运行没有出错,但是没有产生33.txt文件

求问,这是为什么,两个运行方式有区别吗??
谢谢谢谢
作者: nomaze    时间: 2011-6-29 14:39

自己顶一个,没人知道吗
作者: tmplinshi    时间: 2011-6-29 14:48

因为你在命令行下运行后,环境变量就留在了那个窗口(进程),你再次运行时,就已经有那些变量了。

可以加一个 setlocal,这样批处理退出后变量会跟着清除:
  1. @echo off
  2. setlocal
  3. for /f "delims=" %%i in (22.text) do (if not defined %%i set %%i=A && echo %%i>>33.text)
  4. pause
复制代码

作者: CrLf    时间: 2011-6-29 14:56

是把代码复制到cmd中运行还是在窗口中调用bat呢?
作者: nomaze    时间: 2011-6-29 14:56

3# tmplinshi


感谢版主,但是我加了setlocal之后还是没有产生33.text文件,不知道是为什么?
作者: nomaze    时间: 2011-6-29 14:57

4# zm900612


不是复制进去,是用它的名字调用
作者: nomaze    时间: 2011-6-29 15:02

好莫名啊!!!
作者: tmplinshi    时间: 2011-6-29 15:03

求问:写了一个小文件,内容如下
@echo off
for /f "delims=" %%i in (22.text) do (if not defined %%i set %%i=A && echo %%i>>33.text)
pause

双击该.bat文件时运行正常,产生了33.txt文件
但是在命令行下运行时,运行没有出错,但是没有产生33.txt文件 ...
nomaze 发表于 2011-6-29 14:30


你代码中输出的文件是 33.text,而你运行批处理后寻找的是 33.txt
作者: nomaze    时间: 2011-6-29 15:08

8# tmplinshi


哦哦,我写错了,是33.txt,反正我改成33.txt之后,还是一样,我后面没有进行批处理寻找,就是在文件夹中没看到有生成33.txt文件
作者: tmplinshi    时间: 2011-6-29 15:11

本帖最后由 tmplinshi 于 2011-6-29 15:13 编辑

另外一个情况:

e:\我的文档\桌面>c:\test.bat


比如上面的例子,有没有可能你运行后,是在 c:\ 下找 33.text,而实际上 33.text 是生成到了 e:\我的文档\桌面\。
作者: nomaze    时间: 2011-6-29 15:15

10# tmplinshi


不是的,我是在当前运行脚本的文件夹中找的,而且双击该脚本的时候所产生的33.txt是在当前文件夹下的,太妖怪了!!
作者: nomaze    时间: 2011-6-29 15:18

10# tmplinshi


我把cmd.exe关了之后重新开了一下,问题解决了,虽然不知道为什么。。。
谢谢你拉,呵呵
作者: tmplinshi    时间: 2011-6-29 15:29

10# tmplinshi


我把cmd.exe关了之后重新开了一下,问题解决了,虽然不知道为什么。。。
谢谢你拉,呵呵
nomaze 发表于 2011-6-29 15:18

就是 3 楼说的原因。
作者: nomaze    时间: 2011-6-29 15:39

13# tmplinshi


嗯,应该是的,不过不太懂原理,不知道究竟是停留在了哪个窗口(进程)了




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2