中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-06-13 18:55
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 请教:For命令 完整路径错误
楼 主 请教:For命令 完整路径错误 发表于 2008-03-03 22:52 ·  中国 广东 广州 电信
新手上路
积分 12
发帖 5
注册 2008-03-01 21:20
UID 111821
性别 男
状态 离线
bat脚本如下:
::--------------------------------------------------------------------------------------------------
set file_name=D:\BAT\DB_BAK\05日志文件\20080303.log
for /f "usebackq tokens=1* delims=:" %%i in (`findstr /n .* %file_name%`) do (
echo %%i
echo %%j
)
::--------------------------------------------------------------------------------------------------
错误提示:
FINDSTR: 无法打开 D:\BAT\DB_BAK\05日志文件\20080303

单独使用 findstr /n .* D:\BAT\DB_BAK\05日志文件\20080303.log 没有问题
是否是for语句中的“\”符号表示正则转义字符的缘故?
应该如何修改,请大家指点?
2 没有人来,自己顶! 发表于 2008-03-03 23:06 ·  中国 广东 广州 电信
新手上路
积分 12
发帖 5
注册 2008-03-01 21:20
UID 111821
性别 男
状态 离线
Help!
3 发表于 2008-03-03 23:17 ·  中国 上海 松江区 电信
铂金会员
★★★★
DOS一根葱
积分 5,493
发帖 2,315
注册 2006-05-01 10:41
UID 54766
性别 男
来自 上海
状态 离线
for /f "tokens=1* delims=:" %%i in ('findstr /n .* "%file_name%"') ......
第一高手 第二高手

4 发表于 2008-03-03 23:18 ·  中国 湖南 娄底 电信
银牌会员
★★★
积分 2,268
发帖 879
注册 2006-12-19 16:23
UID 73968
性别 男
状态 离线
用了usebackq就应该用后引号`而不是单引号'
致精致简!
5 发表于 2008-03-03 23:25 ·  中国 广东 广州 电信
新手上路
积分 12
发帖 5
注册 2008-03-01 21:20
UID 111821
性别 男
状态 离线
Originally posted by fastslz at 2008-3-3 11:17 PM:
for /f "tokens=1* delims=:" %%i in ('findstr /n .* "%file_name%"') ......



多谢回复,不过测试还是不行哦,还是报同样的错误哦!
6 发表于 2008-03-04 00:57 ·  中国 湖北 武汉 电信
版主
★★★★★
积分 11,386
发帖 4,938
注册 2006-07-23 17:10
UID 59080
状态 离线
代码没什么错误,关键是看楼主是否细心了。
7 发表于 2008-03-04 09:41 ·  中国 广东 广州 天河区 电信
新手上路
积分 12
发帖 5
注册 2008-03-01 21:20
UID 111821
性别 男
状态 离线
我又测试了几次,
我的代码在win 2000 的系统上运行就会报错,在win XP的系统上运行没有问题。
fastslz大侠的代码在win 2000 的系统上运行也会报错,在win XP的系统上运行也没有问题。把"%file_name%"的""符号去掉,win 2000 的系统上运行仍报错,在win XP的系统上运行没有问题。
难道是2000与XP系统的区别吗?如何解决适应两个系统的写法,哪位大侠能告知?
8 发表于 2008-03-04 10:34 ·  中国 广西 玉林 电信
金牌会员
★★★★
积分 3,687
发帖 1,467
注册 2005-08-08 12:00
UID 44210
状态 离线
2000与XP系统语法不完全相同,解决适应两个系统的写法是先判断是哪个系统,再跳转到适合该系统运行脚本的标签项
9 发表于 2008-03-04 10:51 ·  中国 上海 松江区 电信
铂金会员
★★★★
DOS一根葱
积分 5,493
发帖 2,315
注册 2006-05-01 10:41
UID 54766
性别 男
来自 上海
状态 离线
Originally posted by eeeee11111 at 2008-3-4 09:41:
把"%file_name%"的""符号去掉

为什么要去掉呢?
N年前我的计算机中级老师说过这样一句话,不管是短文件名或长文件名用“”括起来总没错的,除非你用8.3短名。我多年的经验告诉我,养成这个良好习惯非常非常重要,它决定了你的代码稳定性!
findstr标准语法
findstr "strings" "X:\XXX\XXX.XXX"
第一高手 第二高手

10 发表于 2008-03-04 14:28 ·  中国 福建 福州 联通
高级用户
★★
积分 581
发帖 277
注册 2006-12-23 05:10
UID 74328
性别 男
状态 离线
Originally posted by fastslz at 2008-3-4 10:51:

为什么要去掉呢?
N年前我的计算机中级老师说过这样一句话,不管是短文件名或长文件名用“”括起来总没错的,除非你用8.3短名。我多年的经验 ...



应该是这样

反正用“”括起来总没错
11 发表于 2008-03-04 19:02 ·  中国 广东 广州 天河区 电信
新手上路
积分 12
发帖 5
注册 2008-03-01 21:20
UID 111821
性别 男
状态 离线
Originally posted by fastslz at 2008-3-4 10:51 AM:

为什么要去掉呢?
N年前我的计算机中级老师说过这样一句话,不管是短文件名或长文件名用“”括起来总没错的,除非你用8.3短名。我多年的经验 ...


多谢指点,下次不会出现类似错误。

但在2000下,是否只能先设置当前目录,再做仅文件名的findstr ??
12 发表于 2008-03-05 19:16 ·  中国 台湾 台北市 远传电信
初级用户
积分 107
发帖 42
注册 2007-09-03 16:43
UID 96475
性别 男
状态 离线
这样呢?

@echo off
::--------------------------------------------------------------------------------------------------
set file_name=^"D:\BAT\DB_BAK\05日志文件\20080303.log^"
for /f "usebackq tokens=1* delims=:" %%i in (`findstr /n .* %file_name%`) do (
echo %%i
echo %%j
)
::--------------------------------------------------------------------------------------------------
论坛跳转: