Board logo

标题: [文件操作] 【已解决】批处理for /f命令闪退问题 [打印本页]

作者: dimo    时间: 2021-10-6 23:34     标题: 【已解决】批处理for /f命令闪退问题

最近写了一个批处理,执行之后闪退了。经过排查发现是一个for语句处问题。现在把有关的代码截取如下:
  1. set /p w= input w:
  2. pause
  3. for /f "tokens=* delims= " %%i in (' dir %w% /a-d /b /s | findstr /E ".exe$" ') do echo "%%~nxi"
  4. pause
复制代码
一执行到这个for /f程序就闪退。后来又试了很多次,确定只是in后面括号里有问题。然后我又改了第3行改成:
  1. for /f "tokens=* delims= " %%i in (' dir %w% /a-d /b /s ') do echo "%%~nxi"
复制代码
这样就没有问题了,但是输出的就不是想要的exe后缀的文件名了。我个人认为貌似是“|”字符的问题。
拜托各位大佬看一下到底是什么出问题,应该如何改正。
作者: zzz19760225    时间: 2021-10-7 00:12

抄的一个内容,出处找不到了。好像就是在|前面加上^(shfit+6那个)
自身有多少行
  1. @echo off
  2. for /f %%i in ('type %~f0 ^| find /c /v ""') do (
  3. echo %%i>0.txt
  4. )
  5. pause
复制代码
要不你试试
作者: dimo    时间: 2021-10-7 09:59

回复 2# zzz19760225 谢谢提醒,确实好用了
后来去看了一下符号大全,确实^有取消转义的作用。
符号大全http://bbs.bathome.net/thread-1205-1-1.html#pid25363
作者: Batcher    时间: 2021-10-7 13:31

回复 1# dimo


参考:批处理for命令中的管道符为何要用尖号^进行转义?
http://bbs.bathome.net/thread-1290-2-1.html#pid6306




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