Board logo

标题: 请教:For命令 完整路径错误 [打印本页]

作者: eeeee11111     时间: 2008-3-3 22:52    标题: 请教:For命令 完整路径错误
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语句中的“\”符号表示正则转义字符的缘故?
应该如何修改,请大家指点?

作者: eeeee11111     时间: 2008-3-3 23:06    标题: 没有人来,自己顶!
Help!

作者: fastslz     时间: 2008-3-3 23:17
for /f "tokens=1* delims=:" %%i in ('findstr /n .* "%file_name%"') ......

作者: 26933062     时间: 2008-3-3 23:18
用了usebackq就应该用后引号`而不是单引号'

作者: eeeee11111     时间: 2008-3-3 23:25
Originally posted by fastslz at 2008-3-3 11:17 PM:
for /f "tokens=1* delims=:" %%i in ('findstr /n .* "%file_name%"') ......



多谢回复,不过测试还是不行哦,还是报同样的错误哦!

作者: lxmxn     时间: 2008-3-4 00:57
代码没什么错误,关键是看楼主是否细心了。

作者: eeeee11111     时间: 2008-3-4 09:41
我又测试了几次,
我的代码在win 2000 的系统上运行就会报错,在win XP的系统上运行没有问题。
fastslz大侠的代码在win 2000 的系统上运行也会报错,在win XP的系统上运行也没有问题。把"%file_name%"的""符号去掉,win 2000 的系统上运行仍报错,在win XP的系统上运行没有问题。
难道是2000与XP系统的区别吗?如何解决适应两个系统的写法,哪位大侠能告知?

作者: zh159     时间: 2008-3-4 10:34
2000与XP系统语法不完全相同,解决适应两个系统的写法是先判断是哪个系统,再跳转到适合该系统运行脚本的标签项

作者: fastslz     时间: 2008-3-4 10:51
Originally posted by eeeee11111 at 2008-3-4 09:41:
把"%file_name%"的""符号去掉

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

作者: suntb     时间: 2008-3-4 14:28
Originally posted by fastslz at 2008-3-4 10:51:

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



应该是这样

反正用“”括起来总没错

作者: eeeee11111     时间: 2008-3-4 19:02
Originally posted by fastslz at 2008-3-4 10:51 AM:

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


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

但在2000下,是否只能先设置当前目录,再做仅文件名的findstr ??

作者: sylovanas     时间: 2008-3-5 19:16
这样呢?

@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
)
::--------------------------------------------------------------------------------------------------