[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文本处理] [已解决]批处理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
复制代码
,这竟然出了错。给出如下提示:
“系统找不到文件。”
具体情况请参看十五楼:传送
请高手解答。
1

评分人数

    • CrLf: 感谢给帖子标题标注[已解决]字样PB + 2
I Love Batch as love my life!

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
复制代码

TOP

20# canyuexiaolang

其实你的是可以的,不过我想在本目录搜索。
嗯,我已经把代码改变了。
I Love Batch as love my life!

TOP

是  dir /b /a-d /s "*.test"  有问题啊   提示找不到啊、、  实际上是路径问题、

for /f "tokens=*" %%i in ('dir /b /a-d /s "c:\*.test"') do echo %%i    可以把、、

TOP

16# Batcher

不要空格也是可以复制的,很好。谢谢老大。
I Love Batch as love my life!

TOP

本帖最后由 zfkzp 于 2011-7-22 08:44 编辑

17# CrLf

原来是这样啊。大致是知道是怎么回事了。我回去给改一下。
I Love Batch as love my life!

TOP

if %%~zi GEQ 1024*1024

???
if 不支持在条件中使用算式的吧...

TOP

15# zfkzp
  1. copy /y /z "%%i" e:\tools
复制代码
1

评分人数

    • CrLf: 乐于助人PB + 2
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

本帖最后由 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” 却没有复制过去


求解。
I Love Batch as love my life!

TOP

楼上正解,usebackq使用时,原来括号内标注命令的'要改为`

TOP

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

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

评分人数

    • CrLf: 乐于助人PB + 2
寂寞是黑白的,但黑白不是寂寞,是永恒。BAT 需要的不是可能,而是智慧。

TOP

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
复制代码

TOP

9# CrLf
  1. for /f "delims=" %%i in ('dir /b /a-d /s "C:\*.test"') do echo %%i &exit /b
复制代码
嗯,我用这段在试一下。
I Love Batch as love my life!

TOP

8# cjiabing


感谢指点,我现在就在学,可是系统提示:“此时不应有usebackq”
I Love Batch as love my life!

TOP

估计是路径问题,试试:
  1. for /f "delims=" %%i in ('dir /b /a-d /s "C:\*.test"') do echo %%i &exit /b
复制代码

TOP

返回列表