Board logo

标题: [其他] 批处理for打开就一闪,想问下为什么不会停留? [打印本页]

作者: qhmpv    时间: 2019-6-14 23:24     标题: 批处理for打开就一闪,想问下为什么不会停留?

最近在自学批处理 ,写一个简单的看看能得到怎么样的效果,但是打开就一闪,想问下为什么不会停留,还有如果想把echo %%i 的内容写到一个txt里,是不是在后面加一个>>a.txt就可以了,请各位大神指教,谢谢!!
  1. @echo off
  2. cd /d %~dp0
  3. for /f %%i in(123.txt) do echo %%i
  4. pause
复制代码

作者: zaqmlp    时间: 2019-6-14 23:57

  1. (for /f "delims=" %%i in ('type "123.txt"') do echo %%i)>"a.txt"
复制代码

作者: qhmpv    时间: 2019-6-15 16:46

回复 2# zaqmlp


    感谢大神的回复,我想问下上面我那个有什么问题,因为我想看看每次参数后的结果,你这个加了delims结果就变了,谢谢!!
作者: zaqmlp    时间: 2019-6-15 16:52

回复 3# qhmpv
那就把"delims="去掉
作者: qhmpv    时间: 2019-6-15 21:26

回复 4# zaqmlp


    你好,经过试验,(for不是内部命令,所以for不用加(),然后试验的结果为什么跟学的不一样,学习的内容是这样的:
for /f %%i in (a.txt) do echo %%i

还是先从括号执行,因为含有参数/f,所以for会先打开a.txt,然后读出a.txt里面的所有内容,把它作为一个集合,并且以每一行作为一个元素,所以会产生这样的集合,


{“第1行第1列 第1行第2列 第1行第3列”, //第一个元素

“第2行第1列 第2行第2列 第2行第3列”, //第二个元素

“第3行第1列 第3行第2列 第3行第3列”}   //第三个元素


集合中只有3个元素,同样用%%i依次代替每个元素,然后执行do后面的命令。

具体过程:


用%%i代替“第1行第1列 第1行第2列 第1行第3列”,执行do后面的echo %%i,显示“第1行第1列 第1行第2列 第1行第3列”,

用%%i代替“第2行第1列 第2行第2列 第2行第3列”,执行echo %%i,显示“第2行第1列 第2行第2列 第2行第3列”,

依次,直到每个元素都代替完为止。

但是我编的是到空格为止就算一行内容完了,并没有第一行第一列,第一行第二列……
123.txt
@echo
title
color
cd
更改当前目录为批处理本身的目录(%0代表批处理本身,
for
for
if
xcopy
echo.成功复制"%%i"到"%%s"文件夹
)
)
)
pause

作者: qhmpv    时间: 2019-6-15 21:29

然后我加了一个"delims=",居然显示的是所有内容,不是应该以空格为分割么??
作者: Batcher    时间: 2019-6-16 13:32

回复 1# qhmpv


但是打开就一闪,想问下为什么不会停留

代码保存为 C:\test.bat
打开一个CMD窗口,执行命令:
C:\test.bat

这样可以看到详细的报错信息或者线索。
作者: Batcher    时间: 2019-6-16 13:34

回复 5# qhmpv


用%%i代替“第1行第1列 第1行第2列 第1行第3列”,执行do后面的echo %%i,显示“第1行第1列 第1行第2列 第1行第3列”,

这里是你自己猜的?还是在哪个教程里面看到的呢?
不使用 tokens 和 delims 的情况下,默认 %%i 只能获取到第一列
作者: Batcher    时间: 2019-6-16 13:35

推荐教程:

批处理for命令视频教程
http://bbs.bathome.net/thread-31727-1-1.html

批处理for命令从入门到精通以及配套练习题
http://bbs.bathome.net/thread-2189-1-1.html
http://bbs.bathome.net/thread-2336-1-1.html
作者: miqilaosu    时间: 2019-6-16 13:40

本帖最后由 miqilaosu 于 2019-6-17 15:44 编辑

回复 6# qhmpv


   in后面的空格哪里去了
作者: qhmpv    时间: 2019-6-16 16:18

回复 8# Batcher


    我是在这里看的:https://blog.csdn.net/DavidHsing/article/details/1996180,看了想写一个简单的看看结果怎么样的,但出来的跟他教的好像不一样

作者: qhmpv    时间: 2019-6-16 16:26

回复 9# Batcher


    管理员大神,我还想问下,  ( 023-0049   阀芯.dwg)   这样的文件名,我想根据前面023-0049这个数字把文件放到相应的文件夹里怎么表标:
for /f "delims=*/" %%i in ('dir /a-d/b "* *.dwg"') do   ?
作者: miqilaosu    时间: 2019-6-16 17:20

回复 12# qhmpv


    for /f "tokens=1,2 delims= " %%i in ('dir /a-d/b "* *.dwg"') do  echo,"%%i %%j"
作者: Batcher    时间: 2019-6-16 17:55

回复 10# miqilaosu


    不接分隔符可以取到整行
作者: Batcher    时间: 2019-6-16 17:55

回复 13# miqilaosu


    delims= 可以省略
作者: qhmpv    时间: 2019-6-17 11:37

回复 15# Batcher


    为什么我输入  c:\ test.bat     显示命令语法不正确?
作者: Batcher    时间: 2019-6-17 12:38

回复 16# qhmpv


    我猜你是多输了一个空格吧
作者: Batcher    时间: 2019-6-17 15:05

回复 12# qhmpv
  1. @echo off
  2. for /f "tokens=1*" %%i in ('dir /a-d /b "* *.dwg"') do (
  3.     if not exist "%%i" (
  4.         md "%%i"
  5.     )
  6.     REM 请自行检查文件名中的空格是几个
  7.     move /y "%%i   %%j" "%%i\"
  8. )
复制代码

作者: qhmpv    时间: 2019-6-17 15:39

回复 18# Batcher


    上面那个空格是我打的时候多打的,我在CMD里输的没有空格,还有你下面的这个程序里,MD "%%i"???不是 md  "%%~ni"?
    %%~ni不是扩展到文件夹名么??
作者: qhmpv    时间: 2019-6-17 15:50

回复 18# Batcher
  管理员大大,你这是回的我私信你的内容吗?试了不行,%%j不需要定义吗?  然后提示系统找不到指定的文件
作者: Batcher    时间: 2019-6-17 16:50

回复 20# qhmpv


看下你真正的文件名里面有个几个空格,18楼第7行%%i   %%j这两个变量中间就保留几个空格。
023-0049   阀芯.dwg
你12楼给的这个例子里面是3个空格,所以我代码里面也放了3个空格,你自己根据实际情况修改即可。
作者: Batcher    时间: 2019-6-17 16:52

回复 19# qhmpv


md "%%i"
md "%%~ni"
你亲自测试一下,哪个能满足你的需求就用哪个。




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