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

[文本处理] 【已解决】批处理想在当前目录显示子目录下文件的指定行,却报错系统找不到文件

[复制链接]
发表于 2015-1-23 09:31:48 | 显示全部楼层 |阅读模式
本帖最后由 c755731262 于 2015-1-24 09:06 编辑
  1. @echo off&color f0&setlocal enabledelayedexpansion
  2. for /f "delims=" %%i in ('dir /b b\*.txt') do (
  3. set n=0
  4. for /f "delims=" %%j in (%%i) do (
  5. set /a n+=1
  6. if !n!==2 echo %%j
  7. )
  8. )
  9. pause>nul
复制代码
而下面的代码却没问题,不知道上面的代码出错原因在哪
  1. @echo off&color f0
  2. setlocal enabledelayedexpansion
  3. rem usebackq参数添加进去后,会把文件名里面有空格的也列举出来
  4. for /f "delims=" %%h in ('dir /b *.txt') do (
  5. set n=0
  6. for /f "usebackq delims=" %%i in ("%%h") do (
  7. set /a n+=1
  8. if !n!==2 (echo %%i)
  9. )
  10. )
  11. pause
复制代码

评分

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

查看全部评分

发表于 2015-1-23 10:21:35 | 显示全部楼层
本帖最后由 pcl_test 于 2015-1-23 11:12 编辑

回复 1# c755731262
  1. dir /b b\*.txt
复制代码
这是什么路径??
 楼主| 发表于 2015-1-23 10:38:50 | 显示全部楼层
回复 2# pcl_test


    查找指定目录下的文件,只显示文件名和扩展名
发表于 2015-1-23 10:44:48 | 显示全部楼层
回复 3# c755731262
代码的作用是知道的,说的是你的路径错了
 楼主| 发表于 2015-1-23 11:04:21 | 显示全部楼层
回复 4# pcl_test


    第二个代码 测试过的路径没错,文件和代码处在同一个目录里面
发表于 2015-1-23 11:11:26 | 显示全部楼层
回复 5# c755731262
路径的问题你还没搞懂,你的第二段代码使用的是相对路径,查找的是跟批处理文件在同一目录里的txt文件,是没有问题的,你的第一段代码的路径就不知是什么了,所以会提示错误
你的第一段代码路径
  1. dir /b b\*.txt
复制代码
你的第二段代码路径
  1. dir /b *.txt
复制代码
 楼主| 发表于 2015-1-23 18:28:15 | 显示全部楼层
回复 6# pcl_test


    批处理想在当前目录显示子目录下文件的指定行,当前目录和文件夹b在同一个目录下,子目录是b目录
 楼主| 发表于 2015-1-23 18:36:55 | 显示全部楼层
回复 6# pcl_test


    路径换成绝对路径也不行
发表于 2015-1-23 19:40:26 | 显示全部楼层
本帖最后由 pcl_test 于 2015-1-23 19:47 编辑

回复 7# c755731262
如果b表示是子目录,那么在路径中也要添加
  1. @echo off&color f0&setlocal enabledelayedexpansion
  2. for /f "delims=" %%i in ('dir /b b\*.txt') do (
  3. set n=0
  4. for /f "usebackq delims=" %%j in ("b\%%i") do (
  5. set /a n+=1
  6. if !n!==2 echo %%j
  7. )
  8. )
  9. pause>nul
复制代码
  1. @echo off&color f0&setlocal enabledelayedexpansion
  2. for /f "delims=" %%i in ('dir /b b\*.txt') do (
  3. pushd b\
  4. set n=0
  5. for /f "usebackq delims=" %%j in ("%%i") do (
  6. set /a n+=1
  7. if !n!==2 echo %%j
  8. )
  9. popd
  10. )
  11. pause>nul
复制代码
  1. @echo off&color f0&setlocal enabledelayedexpansion
  2. cd /d b\
  3. for /f "delims=" %%i in ('dir /b *.txt') do (
  4. set n=0
  5. for /f "usebackq delims=" %%j in ("%%i") do (
  6. set /a n+=1
  7. if !n!==2 echo %%j
  8. )
  9. )
  10. pause>nul
复制代码
发表于 2015-1-23 20:44:09 | 显示全部楼层
楼主可能没看懂 pcl_test 的判断,简单解释一下:
dir /b b\*.txt 得到的结果只有 b 文件夹下的文件名,而不含具体路径,所以 for 理解 "%%i" 的时候想当然地在当前目录中寻找这些文件,那结果当然是错的

评分

参与人数 1技术 +1 收起 理由
c755731262 + 1 一语点透梦中人。。。

查看全部评分

 楼主| 发表于 2015-1-24 09:04:59 | 显示全部楼层
回复 9# pcl_test


    谢谢你的一直关注,获益匪浅。。。
 楼主| 发表于 2015-2-10 10:01:11 | 显示全部楼层
回复 10# CrLf


    奇怪为什么有时候却没报错如这个
  1. @echo off&color f0

  2. setlocal enabledelayedexpansion

  3. rem usebackq参数添加进去后,会把文件名里面有空格的也列举出来

  4. for /f "delims=" %%h in ('dir /b *.txt') do (

  5. set n=0

  6. for /f "usebackq delims=" %%i in ("%%h") do (

  7. set /a n+=1

  8. if !n!==2 (echo %%i)

  9. )

  10. )

  11. pause
复制代码
 楼主| 发表于 2015-2-10 10:04:34 | 显示全部楼层
回复 12# c755731262


    刚才发错了,是这个
  1. @echo off&color f0
  2. (for /f "delims=" %%i in ('dir /b a') do (
  3. for /f "delims=" %%j in (%%i) do (
  4. echo %%j
  5. )
  6. )
  7. )>>999.txt
复制代码
代码和目录在同一个目录下,但可以正常运行,按理说要在内循环加路径
发表于 2019-6-16 09:49:29 | 显示全部楼层
回复 13# c755731262


    dir /b /a
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-19 05:46 , Processed in 0.022157 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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