找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 86642|回复: 21

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

[复制链接]
发表于 2011-7-21 21:01:22 | 显示全部楼层 |阅读模式
本帖最后由 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
复制代码
,这竟然出了错。给出如下提示:
“系统找不到文件。”
具体情况请参看十五楼:传送
请高手解答。

评分

参与人数 1PB +2 收起 理由
CrLf + 2 感谢给帖子标题标注[已解决]字样

查看全部评分

发表于 2011-7-21 21:18:25 | 显示全部楼层
代码没有问题。
发表于 2011-7-21 21:31:31 | 显示全部楼层
搞不懂你的那个带有空格的路径在for中放在哪个位置!~
没想到啊没想到,这竟然不懂。明晃晃金灿灿给出如下提示:
按理说,路径含有空格的需用双引号括起来,如果是在FOR集合中,需要用到usebackq选项。
发表于 2011-7-21 21:37:38 | 显示全部楼层
你的文件是.test,你让dir去找.zip,让人家dir情何以堪啊?

评分

参与人数 1PB +2 收起 理由
CrLf + 2 乐于助人

查看全部评分

 楼主| 发表于 2011-7-21 21:41:22 | 显示全部楼层
3# cjiabing


应该是括号内吧。
 楼主| 发表于 2011-7-21 21:41:50 | 显示全部楼层
4# CUer


现在改过来了。
 楼主| 发表于 2011-7-21 21:52:02 | 显示全部楼层
3# cjiabing

之前试过backuseQ了,系统同样提示不能有backuseQ。
发表于 2011-7-21 21:52:03 | 显示全部楼层
5# zfkzp 学学FOR的usebackq吧:FOR/F的选项usebackq的用法
发表于 2011-7-21 22:01:51 | 显示全部楼层
估计是路径问题,试试:
  1. for /f "delims=" %%i in ('dir /b /a-d /s "C:\*.test"') do echo %%i &exit /b
复制代码
 楼主| 发表于 2011-7-21 22:04:54 | 显示全部楼层
8# cjiabing


感谢指点,我现在就在学,可是系统提示:“此时不应有usebackq”
 楼主| 发表于 2011-7-21 22:05:52 | 显示全部楼层
9# CrLf
  1. for /f "delims=" %%i in ('dir /b /a-d /s "C:\*.test"') do echo %%i &exit /b
复制代码
嗯,我用这段在试一下。
发表于 2011-7-21 22:22:23 | 显示全部楼层
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
复制代码
发表于 2011-7-21 22:38:27 | 显示全部楼层
本帖最后由 cjiabing 于 2011-7-21 22:42 编辑

不懂你搞什么。你的代码根本不存在路径,只是命令,命令要使用单引号。如果使用了usebackq,则命令使用后引号:如果不得,把你的代码发上来!~
  1. for /f "usebackq delims=" %%i in (`dir /b /a-d /s *.txt`) do echo %%i
复制代码
晕,你发的命令都可以执行的啊!~

评分

参与人数 1PB +2 收起 理由
CrLf + 2 乐于助人

查看全部评分

发表于 2011-7-21 23:03:18 | 显示全部楼层
楼上正解,usebackq使用时,原来括号内标注命令的'要改为`
 楼主| 发表于 2011-7-21 23:20:24 | 显示全部楼层
本帖最后由 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” 却没有复制过去


求解。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 19:40 , Processed in 0.024385 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表