Board logo

标题: [文本处理] [已解决]批处理for截取有空格的文件名时为何出错? [打印本页]

作者: zfkzp    时间: 2011-7-21 21:01     标题: [已解决]批处理for截取有空格的文件名时为何出错?

本帖最后由 zfkzp 于 2011-7-22 15:12 编辑

今天想试一下用for做一下实验,结果第一个就出了叉子还让我折腾好久。
用for截取有空格的文件名是系统会提示找不到文件。
已知有同一目录下有两个文件,
c:\bathome.test
c:\bat heme.test

代码本按理说应该这么写:
  1. 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

估计是路径问题,试试:
  1. 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
  1. 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 开关只能接受一条参数(其实是多个参数写成一条),需要同时使用多个参数时,需要把它们用双引号括起来使之被看成一条参数(好绕啊),比如这样:
  1. @echo off
  2. for /f "eol=p usebackq skip=1 tokens=* delims= " %%a in ("%~0") do echo %%a
  3. pause
复制代码

作者: cjiabing    时间: 2011-7-21 22:38

本帖最后由 cjiabing 于 2011-7-21 22:42 编辑

不懂你搞什么。你的代码根本不存在路径,只是命令,命令要使用单引号。如果使用了usebackq,则命令使用后引号:如果不得,把你的代码发上来!~
  1. 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

是这样的,我想改进一个自动给文件分类的批处理。简单点的代码,就是这样

为了方便大家,我给大家传了外链了图片过来。
  1. @echo off
  2. for /f "usebackq delims=" %%i in (`dir /b /a-d /s *.rar`) do if %%~zi GEQ 1024*1024 copy /y/z %%i e:\tools
  3. 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
  1. copy /y /z "%%i" e:\tools
复制代码

作者: CrLf    时间: 2011-7-22 00:10

if %%~zi GEQ 1024*1024

???
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
我也怀疑,不过事实证明——支持……
  1. C:\Users\helloworld\Desktop>if 125 geq 55*3 echo hello
  2. C:\Users\helloworld\Desktop>if not 125 geq 55*3 echo hello
  3. hello
复制代码





欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2