中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

中国DOS联盟论坛
现在时间是 2026-08-04 12:09
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 这个为什么会陷入死循环? 查看 1,975 回复 15
楼 主 这个为什么会陷入死循环? 发表于 2007-04-26 15:41 ·  中国 重庆 长寿区 电信
初级用户
积分 101
发帖 47
注册 2007-04-18 16:05
19年会员
UID 85634
性别 男
状态 离线
原bat如下

@echo off

echo 文件拷贝中,请稍后

for /f "tokens=2 delims=\" %%e in ('cd') do copy /e /z /d /y /i /k /h /r /v /c d:\"%%e" e:\"%%e"

echo 文件拷贝完成 && pause

exit

为什么我执行了会变成第二行和第三行反复循环执行而不拷贝文件?

因为我对for命令不是完全理解,请高手指教,另:for中的/f和/r有什么不同?
谢谢
2 发表于 2007-04-26 17:25 ·  中国 广东 广州 联通
银牌会员
★★★
积分 1,206
发帖 517
注册 2007-03-25 01:18
19年会员
UID 82819
性别 男
状态 离线
Originally posted by chkau at 2007-4-26 02:41 AM:
原bat如下

@echo off

echo 文件拷贝中,请稍后

for /f "tokens=2 delims=\" %%e in ('cd') do copy /e /z /d /y /i /k /h /r /v /c d:\"%%e" e:\"%%e"

echo ...


呵呵,你的胆子可真不小哦:) 好在不是删除文件!

问题1: "tokens=2 delims=\" %%e in ('cd')
假设,所在盘符为 d:\program files\flyinspace.
此时,所找到的文件为 xcopy d:\program e:\program
文件找不到。
问题2: copy /e /z /d /y /i /k /h /r /v /c d:\"%%e" e:\"%%e"
copy 有这么多参数么??
应该是: xcopy 吧。
问题3:我实在不明白你到底要做什么?
写了这么一段不明不白的程序出来。
知,不觉多。不知,乃求知
3 发表于 2007-04-27 05:34 ·  中国 上海 浦东新区 电信
中级用户
★★
积分 302
发帖 138
注册 2007-03-29 02:33
19年会员
UID 83224
性别 男
状态 离线
楼主的要复制目录下的目录或文件可以这样:
for /f "tokens=* delims=" %%i in ('dir /b d:\test\') do xcopy /e /i D:\test\%%i E:\test\%%i
pause

不过会提示确定目录或文件,不知道怎么让xcopy静默复制
4 发表于 2007-04-27 11:52 ·  中国 重庆 长寿区 电信
初级用户
积分 101
发帖 47
注册 2007-04-18 16:05
19年会员
UID 85634
性别 男
状态 离线
我的目的是让这段批处理放到D盘任意一个二级文件夹内执行,就在该目录和E盘的同名目录间执行XCOPY
回2楼,不知道你实验没有,for /f "tokens=2 delims=\" %%e in ('cd') do copy /e /z /d /y /i /k /h /r /v /c d:\"%%e" e:\"%%e"
这段代码,在cmd下执行%e的值是在该bat所在的当前二级目录
比如放在D:\program files下,则%e为program files,因为delims=\后面并没有空格
所以copy /e /z /d /y /i /k /h /r /v /c d:\"program files" e:\"programe files"
命令是可行的

不过我确实不明白,为什么放到批处理里面会出现死循环???个人估计和/f参数有关,望各位高手指点/f和/r参数究竟是什么意思,小弟拜求了,winxp的for /?确实写的让人越看越糊涂
5 发表于 2007-04-27 11:55 ·  中国 重庆 长寿区 电信
初级用户
积分 101
发帖 47
注册 2007-04-18 16:05
19年会员
UID 85634
性别 男
状态 离线
实在不好意思,我给出的代码打错了,应该是XCOPY,而不是copy,望各位见谅.........
6 发表于 2007-04-27 12:31 ·  中国 湖北 武汉 电信
版主
★★★★★
积分 11,386
发帖 4,938
注册 2006-07-23 17:10
20年会员
UID 59080
状态 离线
最直接的方式是打开命令行回显,再来测试,查找原因。
7 发表于 2007-04-27 14:02 ·  中国 重庆 长寿区 电信
初级用户
积分 101
发帖 47
注册 2007-04-18 16:05
19年会员
UID 85634
性别 男
状态 离线
我就是打开了回显,所以知道是第二行和第三行反复循环
就是不知道为什么会这样,感觉像是循环赋值,但是又不敢确定,一直对/f和/r参数都不是很了解,但是换了/r参数一样一直循环,而%%e的参数又是正确的,实在不解
8 发表于 2007-04-27 22:36 ·  中国 广西 玉林 博白县 电信
金牌会员
★★★★
积分 3,687
发帖 1,467
注册 2005-08-08 12:00
20年会员
UID 44210
状态 离线
LZ的代码是不是精简过了再帖上来的???如果是主贴代码,是不可能在第二行和第三行反复循环。

for /r /f参数在for/?中都有说明:/r 指定目录,/f 设定分隔、跳行

xcopy 相同目录方式复制静默复制可用:
echo.f|xcopy/y "d:\路径\*.*" "e:\路径\*.*">nul
会自动根据文件所在子目录建立对应的新目录,>nul用来屏蔽显示
9 发表于 2007-04-29 12:39 ·  中国 重庆 长寿区 电信
初级用户
积分 101
发帖 47
注册 2007-04-18 16:05
19年会员
UID 85634
性别 男
状态 离线
这个没有精简过
for /f "tokens=2 delims=\" %%e in ('cd') do set "wjj=%%e"

xcopy /e /z /d /y /i /k /h /r /v /c d:\"%wjj%" e:\"%wjj%"

md d:\"%wjj%"\2

rd d:\"%wjj%"\2

echo ---文件复制完成---

ping -n 2 127.0.0.1>nul

exit
但实际上是一样的代码,稍作了修改,大家可以实验一下,在D盘新建一个目录,然后把这个批处理丢进去执行
10 发表于 2007-04-30 01:26 ·  中国 重庆 长寿区 电信
初级用户
积分 101
发帖 47
注册 2007-04-18 16:05
19年会员
UID 85634
性别 男
状态 离线
请各位大大帮忙看一下啊
11 发表于 2007-04-30 02:14 ·  中国 浙江 杭州 华数宽带
银牌会员
★★★
积分 2,000
发帖 621
注册 2007-01-01 00:00
19年会员
UID 75212
性别 男
状态 离线
测试:

e盘新建文件夹 1


for /f "tokens=2 delims=\" %%e in ('cd') do set "wjj=%%e"

xcopy /e /z /d /y /i /k /h /r /v /c e:\"%wjj%" d:\"%wjj%"

md d:\"%wjj%"\2

rd d:\"%wjj%"\2

echo ---文件复制完成---

ping -n 2 127.0.0.1>nul

exit
这段代码保存到了1.bat存入 e:\1\
然后cmd切换到 e:\1目录下;执行1.bat
没问题;
d:生成文件夹1里面包含 1.bat

不知道lz说的问题所在
12 发表于 2007-04-30 02:29 ·  中国 重庆 长寿区 电信
初级用户
积分 101
发帖 47
注册 2007-04-18 16:05
19年会员
UID 85634
性别 男
状态 离线
.........我发现问题了..........
晕啊我犯了一个最低级的错误
我把bat的名字设置为xcopy.bat............
晕了,不好意思麻烦各位了
13 发表于 2007-04-30 02:31 ·  中国 广西 玉林 博白县 电信
金牌会员
★★★★
积分 3,687
发帖 1,467
注册 2005-08-08 12:00
20年会员
UID 44210
状态 离线
Originally posted by chkau at 2007-4-29 13:29:
.........我发现问题了..........
晕啊我犯了一个最低级的错误
我把bat的名字设置为xcopy.bat............
晕了,不好意思麻烦各位了

14 发表于 2007-04-30 02:34 ·  中国 重庆 长寿区 电信
初级用户
积分 101
发帖 47
注册 2007-04-18 16:05
19年会员
UID 85634
性别 男
状态 离线
^^我发觉我最近越来越可爱了,嘿嘿,各位大哥表烦偶哈
15 发表于 2007-04-30 03:04 ·  中国 湖北 武汉 洪山区 电信
初级用户
积分 68
发帖 31
注册 2007-03-23 12:33
19年会员
UID 82670
性别 男
状态 离线
Originally posted by chkau at 2007-4-29 01:29 PM:
.........我发现问题了..........
晕啊我犯了一个最低级的错误
我把bat的名字设置为xcopy.bat............
晕了,不好意思麻烦各位了


嘿。。以前也曾经犯过这样的毛病。。。。
论坛跳转: