当前位置:  开发笔记 > 程序员 > 正文

为什么在用于从批处理脚本中读取所有行时,FOR无法找到指定的文件?

如何解决《为什么在用于从批处理脚本中读取所有行时,FOR无法找到指定的文件?》经验,为你挑选了1个好方法。

我有一些日志文件,我的批处理脚本需要能够读取和解析.

我遇到了一个问题,我的FOR循环可以读取大多数文件,但无法读取特定的文件.如果我在命令提示符窗口中运行

for /f %Z in (N151204.log) do echo %Z

它工作得很好,但在不同文件上的语法完全相同:

for /f %Z in (IN151205.log) do echo %Z

给我:

系统找不到文件IN151205.log.

我可以读文件IN151205.log

more IN151205.log

没问题.因此,就我所知,它似乎不是权限问题或读锁定.

为什么for循环有这个特定文件的问题?



1> Mofi..:

命令FOR的错误消息是由FOR命令打开一个文件以便始终使用带有AND的CreateFile引起的.FILE_SHARE_READFILE_SHARE_DELETE

IN151205.log显然,日志文件由另一个应用程序写入,并在文件上建立了写锁定.因此,命令FOR的文件访问因共享冲突而失败FILE_SHARE_DELETE.

MORE已成功打开具有写锁定设置的文件并输出行,因为它实际上只读取文件并使用不同的方法.更多用途的CreateFileMapping使用PAGE_READWRITE读取和输出文件的内容页面明智其中工程不是完全不同的CreateFile,也可以用在当前被另一个应用程序锁定的文件中提到的注释与节:

它不是必需的,但建议打开要映射的文件以进行独占访问.

PAGE_READWRITE 允许对当前仅允许根据共享模式进行读访问的文件进行读访问.

另请参阅Microsoft文章通用访问权限和文件安全性和访问权限.

FOR在访问文件时输出的错误消息失败,因为共享冲突显然不利于误导用户.

编辑:

可以使用逐行读取批处理文件中的写入锁定文件

for /f %%Z in ('more IN151205.log') do echo %%Z

for /f %%Z in ('type IN151205.log') do echo %%Z

感谢Aacini和Squashman提供的这些补充信息.


您可以使用:`for/f%Z in('more IN151205.log')do echo%Z`
@Tal我会假设TYPE命令也可以.
推荐阅读
地之南_816
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有