标题: [其他] 批处理for打开就一闪,想问下为什么不会停留? [打印本页]
作者: qhmpv 时间: 2019-6-14 23:24 标题: 批处理for打开就一闪,想问下为什么不会停留?
最近在自学批处理 ,写一个简单的看看能得到怎么样的效果,但是打开就一闪,想问下为什么不会停留,还有如果想把echo %%i 的内容写到一个txt里,是不是在后面加一个>>a.txt就可以了,请各位大神指教,谢谢!!- @echo off
- cd /d %~dp0
- for /f %%i in(123.txt) do echo %%i
- pause
复制代码
作者: zaqmlp 时间: 2019-6-14 23:57
- (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 - @echo off
- for /f "tokens=1*" %%i in ('dir /a-d /b "* *.dwg"') do (
- if not exist "%%i" (
- md "%%i"
- )
- REM 请自行检查文件名中的空格是几个
- move /y "%%i %%j" "%%i\"
- )
复制代码
作者: 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://www.bathome.net/) |
Powered by Discuz! 7.2 |