标题: [文本处理] [已解决]批处理for截取有空格的文件名时为何出错? [打印本页]
作者: zfkzp 时间: 2011-7-21 21:01 标题: [已解决]批处理for截取有空格的文件名时为何出错?
本帖最后由 zfkzp 于 2011-7-22 15:12 编辑
今天想试一下用for做一下实验,结果第一个就出了叉子还让我折腾好久。
用for截取有空格的文件名是系统会提示找不到文件。
已知有同一目录下有两个文件,
c:\bathome.test
c:\bat heme.test
代码本按理说应该这么写:- for /f "delims=" %%i in ('dir /b /a-d /s "*.test"') do echo %%i &exit /b
复制代码
,这竟然出了错。给出如下提示:
具体情况请参看十五楼:传送
请高手解答。
作者: tmplinshi 时间: 2011-7-21 21:18
代码没有问题。
作者: cjiabing 时间: 2011-7-21 21:31
搞不懂你的那个带有空格的路径在for中放在哪个位置!~
没想到啊没想到,这竟然不懂。明晃晃金灿灿给出如下提示:
按理说,路径含有空格的需用双引号括起来,如果是在FOR集合中,需要用到usebackq选项。
作者: CUer 时间: 2011-7-21 21:37
你的文件是.test,你让dir去找.zip,让人家dir情何以堪啊?
作者: zfkzp 时间: 2011-7-21 21:41
3# cjiabing
应该是括号内吧。
作者: zfkzp 时间: 2011-7-21 21:41
4# CUer
现在改过来了。
作者: zfkzp 时间: 2011-7-21 21:52
3# cjiabing
之前试过backuseQ了,系统同样提示不能有backuseQ。
作者: cjiabing 时间: 2011-7-21 21:52
5# zfkzp 学学FOR的usebackq吧:FOR/F的选项usebackq的用法
作者: CrLf 时间: 2011-7-21 22:01
估计是路径问题,试试:- for /f "delims=" %%i in ('dir /b /a-d /s "C:\*.test"') do echo %%i &exit /b
复制代码
作者: zfkzp 时间: 2011-7-21 22:04
8# cjiabing
感谢指点,我现在就在学,可是系统提示:“此时不应有usebackq”
作者: zfkzp 时间: 2011-7-21 22:05
9# CrLf - for /f "delims=" %%i in ('dir /b /a-d /s "C:\*.test"') do echo %%i &exit /b
复制代码
嗯,我用这段在试一下。
作者: CrLf 时间: 2011-7-21 22:22
10# zfkzp
你是怎么写的呢?for 命令的 /f 开关只能接受一条参数(其实是多个参数写成一条),需要同时使用多个参数时,需要把它们用双引号括起来使之被看成一条参数(好绕啊),比如这样:- @echo off
- for /f "eol=p usebackq skip=1 tokens=* delims= " %%a in ("%~0") do echo %%a
- pause
复制代码
作者: cjiabing 时间: 2011-7-21 22:38
本帖最后由 cjiabing 于 2011-7-21 22:42 编辑
不懂你搞什么。你的代码根本不存在路径,只是命令,命令要使用单引号。如果使用了usebackq,则命令使用后引号:如果不得,把你的代码发上来!~- for /f "usebackq delims=" %%i in (`dir /b /a-d /s *.txt`) do echo %%i
复制代码
晕,你发的命令都可以执行的啊!~
作者: bluewing009 时间: 2011-7-21 23:03
楼上正解,usebackq使用时,原来括号内标注命令的'要改为`
作者: zfkzp 时间: 2011-7-21 23:20
本帖最后由 zfkzp 于 2011-7-22 08:49 编辑
13# cjiabing
是这样的,我想改进一个自动给文件分类的批处理。简单点的代码,就是这样
为了方便大家,我给大家传了外链了图片过来。- @echo off
- for /f "usebackq delims=" %%i in (`dir /b /a-d /s *.rar`) do if %%~zi GEQ 1024*1024 copy /y/z %%i e:\tools
- exit /b
复制代码
而C:\KuGou\Temp\下面却是有如下两个文件
复件 1.rar
haiducii914c4dc633fbd4cd429678a2c621ab2d.rar1
按照cjiabing版主的代码,
for /f "usebackq delims=" %%i in (`dir /b /a-d /s *.rar`) do echo %%i
执行结果却是下面这样
100% 已复制 已复制 1 个文件。
系统找不到指定的文件。
已复制的是“haiducii914c4dc633fbd4cd429678a2c621ab2d.rar1”
“复件 1.rar” 却没有复制过去
求解。
作者: Batcher 时间: 2011-7-22 00:10
15# zfkzp - copy /y /z "%%i" e:\tools
复制代码
作者: CrLf 时间: 2011-7-22 00:10
???
if 不支持在条件中使用算式的吧...
作者: zfkzp 时间: 2011-7-22 08:43
本帖最后由 zfkzp 于 2011-7-22 08:44 编辑
17# CrLf
原来是这样啊。大致是知道是怎么回事了。我回去给改一下。
作者: zfkzp 时间: 2011-7-22 08:43
16# Batcher
不要空格也是可以复制的,很好。谢谢老大。
作者: canyuexiaolang 时间: 2011-7-22 16:57
是 dir /b /a-d /s "*.test" 有问题啊 提示找不到啊、、 实际上是路径问题、
for /f "tokens=*" %%i in ('dir /b /a-d /s "c:\*.test"') do echo %%i 可以把、、
作者: zfkzp 时间: 2011-7-22 17:48
20# canyuexiaolang
其实你的是可以的,不过我想在本目录搜索。
嗯,我已经把代码改变了。
作者: Hello123World 时间: 2011-7-23 14:10
17# CrLf
我也怀疑,不过事实证明——支持……- C:\Users\helloworld\Desktop>if 125 geq 55*3 echo hello
-
- C:\Users\helloworld\Desktop>if not 125 geq 55*3 echo hello
- hello
复制代码
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |