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

[文件操作] [已解决]批处理for echo不成功,是什么原因?

  1. for /f "delims=" %%i in ('dir /b /on "txt\*.txt"') do echo %%i %%~ni %%~zi
复制代码
echo的结果 100119859674.txt 100119859674 就是没有%%~zi,单独echo %%~zi,提示echo要么开启要么关闭
win11 bat为ansi
请指教。实在搞不明白。
1

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2
目的,学习批处理

平时这样写
  1. for /f "delims=" %%i in ('dir /b /a-d *.txt') do echo %%i
复制代码


%%i既是文件名,又是相对路径;而1楼的的%%i只是文件名,所以会扩展批处理工作目录下的%%i
bat小白,请多指教!谢谢!

TOP

回复 2# 77七
依旧没有显示 %%~zi
目的,学习批处理

TOP

回复 3# hlzj88


  
  1. @echo off
  2. >100119859674.txt echo 123
  3. for /f "delims=" %%i in ('dir /b /on "txt\*.txt"') do echo %%i %%~ni %%~zi
  4. pause
复制代码
看看扩展的是哪个文件
bat小白,请多指教!谢谢!

TOP

回复 4# 77七
把txt\ 去掉 3种都有显示 100119859674.txt 100119859674 5
把txt\加上,当然只显示txt下文件,但没有%%~zi数据
目的,学习批处理

TOP

回复 5# hlzj88


  
  1. @echo off
  2. md test
  3. >test\t.t echo 123
  4. >t.t echo 123456
  5. for /f "delims=" %%i in ('dir /b /a-d "test\*.t"') do (
  6. rem 扩展工作目录下的t.t
  7. echo %%~dpi
  8. echo %%~zi
  9. for %%a in ("test\%%i") do (
  10. rem 扩展test目录下的t.t
  11. echo %%~dpa
  12. echo %%~za
  13. )
  14. )
  15. pause
复制代码
bat小白,请多指教!谢谢!

TOP

本帖最后由 hlzj88 于 2025-3-1 20:31 编辑

回复 6# 77七
S:\新建文件夹e\
8
S:\新建文件夹e\test\
5
我放文件夹e下执行了,就显示这些。
目的,学习批处理

TOP

本帖最后由 aloha20200628 于 2025-3-1 20:56 编辑

回复 1# hlzj88

或者在当前目录下用下式(命令行验证即可)
  1. for /f "delims=" %i in ('dir /b "*.txt" ') do echo %i %~ni %~zi
复制代码
或者加持 /s 参数如下式(命令行验证即可)
  1. for /f "delims=" %i in ('dir /b/s "\txt\*.txt" ') do echo %i %~ni %~zi
复制代码

TOP

本帖最后由 hlzj88 于 2025-3-1 21:14 编辑

回复 8# aloha20200628
你好!原搬你的代码,加了暂停,ansi,都是一闪而过。
改为%%i及后面也改,第一段代码 三者都显示

把你的第二段代码 \txt\ 改为 txt\,三者都显示
目的,学习批处理

TOP

本帖最后由 aloha20200628 于 2025-3-1 21:33 编辑

回复 9# hlzj88

用以下代码存为 test.bat 试行...
测试目录 %d% 由楼主自定义(但须保留末级子目录名是 txt 即可)
  1. @echo off &set "d=d:\tmp\txt"
  2. cd /d "%d%"
  3. for /f "delims=" %%i in ('dir /b "*.txt" ') do echo,%%i %%~ni %%~zi
  4. cd ..
  5. for /f "delims=" %%i in ('dir /b/s "txt\*.txt" ') do echo,%%i %%~ni %%~zi
  6. pause&exit/b
复制代码

TOP

看%%i 的结果就知道了,%%i 的结果是 100119859674.txt ,是指当前目录下的 100119859674.txt,
而不是楼主所想的txt文件夹下的100119859674.txt
100119859674.txttxt\100119859674.txt是不一样的

想要达到楼主所要求的可以再套一个for
或者
先cd或pushd后直接dir
1

评分人数

TOP

回复 11# Five66
感谢指教,同时感谢 77七 aloha20200628

因平时 都是习惯 dir /b/on txt\*.txt 这样的写法,今天需要%%~zi结果,才发现%%~zi没有结果。以前用这样的语句也能出%%~zi。
下次知道了还是加/s可靠。
目的,学习批处理

TOP

dir /b/on txt\*.txt 返回的字符串是单纯的文件名,不带路径,所以变量增强扩展默认当前路径:
  1. for /f "delims=" %%i in ('dir /b /on "txt\*.txt"') do echo,%%~dpi---%%~fi
复制代码
只要返回的字符串带路径(相对或绝对)就能正确扩展,dir加s是返回绝对路径,也可以使用相对路径:
  1. for %%i in ("txt\*.txt") do echo,%%~dpi---%%~fi
复制代码

TOP

返回列表