标题: [讨论]FOR语句读取文件所在路径带有空格问题
[打印本页]
作者: tom
时间: 2009-10-18 13:45
标题: [讨论]FOR语句读取文件所在路径带有空格问题
我想做的这个批处理,是想要读取某个通过提示输入的路径,并查找该文件夹下的 test.txt 文件,如果存在该文件就读取每一行的内容(除了含有“I will delete this line”字符的那一行),并将读取到的内容写入temp.txt,最后通过 move 的方式覆盖原文件。本来没有空格的路径工作很正常,但是只要带有空格,就出问题:
1. 不加双引号的话就就无法指定带空格的路径
2. 如果变量加双引号,For 语句读取的路径居然会多一个半边引号,这一点我是感到莫名其妙。比如说一个路径为 D:\Hello World 的文件夹,如果加双引号的话,系统就会返回错误提示:系统找不到文件 D:\Hello World"\test.txt ——多了半边引号。
小弟刚接触批处理,还请高手指导一下,代码如下:
@echo off
:enterpath
cls
echo 请输入文件夹路径
set p=
set /p p="如果是当前文件夹请按回车键:"
if "%p%" == "" set p=%cd%
call:confirm "%p%"
:confirm
if not exist "%p%"\test.txt echo Test.txt文件不存在,请确认! & pause & goto enterpath
echo 您要修改的文件所在的路径是:%~f1
echo.
set c=
set /p c="确认请按[Enter]继续,重设请按任意键:"
if "%c%" == "" set p=%~f1
if not "%c%" == "" goto enterpath
if exist "%p%"\test goto modify
:modify
for /f "usebackq" %%i in ("%p%"\test.txt) do (
::上面这一行的变量 p 如果去掉双引号能正常运作,但不支持带空格文件夹
echo %%i | findstr /i "I will delete this line"
if errorlevel 1 echo %%i >> "%p%\temp.txt")
move /y "%p%"\temp.txt "%p%\test.txt"
pause
exit
这个批处理还有个缺点就是会删除空行,还不知道怎么弄,批处理的知识我还要再多家了解才行。
[
Last edited by tom on 2009-10-18 at 13:52 ]
作者: newxso
时间: 2009-10-18 16:14
"%p%"\test.txt ----> "%p%\test.txt"
作者: mwm5
时间: 2009-10-18 16:50
顶楼上的~~呵呵
作者: tom
时间: 2009-10-18 19:44
这我可真的纳闷了!
谢谢两位兄弟指正。用引号括主整个文件的地址这个方法我也试过了,这也是我陷入了这个怪题的一部分原因。
下午出去逛了一圈,回来看到解答一开始觉得不可能啊,我用这个方法怎么就不行。于时我试了一下这个简单版的 test.bat,没错,怎么这个批处理就没问题?
如果是这样,那就是跟我所要修改的文件有关系了。我要修改的是系统隐藏文件 desktop.ini,其实我取消了该文件的系统属性和隐藏属性结果也一样,For语句在读取这个文件时,好像是直接略过了一样,它根本就没有读取desktop.ini这个文件的每一行!
For怎么会这样?加个双引号,它就不读了(而且必须是系统隐藏文件),不加双引号它就能读,这么怪?不信你们试试看(随便临时建立一个desktop.ini文件)。
[
Last edited by tom on 2009-10-18 at 19:47 ]