Board logo

标题: [文本处理] 关于.bat批处理无法直接运行的BUG问题请求 [打印本页]

作者: 去码头整点薯条    时间: 2024-9-12 13:31     标题: 关于.bat批处理无法直接运行的BUG问题请求

本帖最后由 去码头整点薯条 于 2024-9-12 13:32 编辑

系统版本:Windows10  64  专业版

批处理的工作:进行文件夹及其子文件的文件目录(树状目录)生成,并导出为TXT

分别尝试过的批处理:

1.(无反应)
  1. @echo off
  2. tree /f > 1.TXT
复制代码
2.(无反应)
  1. tree /f > tree.txt
复制代码
3.(能运行,无法导出TXT)
  1. @echo off
  2. tree
  3. tree /f > test.TXT
复制代码
4.(能运行,无法导出TXT)
  1. @echo off
  2. cd F:\1
  3. tree
  4. tree /f > test.TXT
复制代码
以上的批处理无论是以.bat方式运行,还是手动通过CMD或Windows PowerShell终端,均无法运行或者导出

但是有意思的奇怪现象是,我用以下的这一段批处理(只能是手动,并且以管理员模式的方式打开Windows PowerShell终端,并且要指定的文件夹才能运行并且导出成功):
第一步(指定要生成的文件夹路径):cd F:\1
第二步:tree
第三步:tree /f > test.TXT

以上我写的1、2、3、4段批处理里面,只有这一段能成功运行并且导出,而之所以说是BUG是因为:如果拿这一段批处理存为.bat的方式去运行,那结果就是:运行成功确无法导出的情况

也就是说:
1.需要以管理员模式运行并打开Windows PowerShell终端(CMD没有用)
2.手动输入命令,并且要指定的文件夹路径才可以生成

期间我以为是编码的问题,修改为ANSI编码保存也还是不行,无论以任何方式、任何编码保存的.bat批处理都无法运行,所以特来向论坛的各位大佬请教并希望能通过解决的方法
目前怀疑是否是需要批处理直接获得Windows PowerShell终端的管理员权限问题
作者: 77七    时间: 2024-9-12 14:36

  1. @FLTMC>nul||(mshta vbscript:CreateObject^("Shell.Application"^).ShellExecute^("%~snx0"," %*","","runas",1^)^(window.close^)&&exit /b)
  2. @echo off
  3. cd /d "%~dp0"
  4. tree /f > 1.txt
  5. pause
复制代码
代码保存为test.bat
作者: czjt1234    时间: 2024-9-12 15:52

难道批处理名称是 tree.bat ?
作者: Batcher    时间: 2024-9-12 17:43

回复 1# 去码头整点薯条


Q-06: 执行bat脚本之后出现死循环
不要把bat命名成脚本里面出现的命令,例如 ping.bat 或 for.bat 等。重命名成 mytest.bat 试试。
https://mp.weixin.qq.com/s/Koje4FufWxWBs7ioDy_LJA
作者: 去码头整点薯条    时间: 2024-9-12 20:12

回复 2# 77七


谢谢大佬,按照你给的批处理运行没有出现出现任何的问题,顺便向大佬请教为什么我会出现这个问题?
作者: 去码头整点薯条    时间: 2024-9-12 20:14

回复 3# czjt1234


    没有,我也怀疑过是名称的问题,但是我的名称都是:1.bat  新建文件夹.bat   的名称,也没有任何的空格键
作者: 去码头整点薯条    时间: 2024-9-12 20:15

回复 4# Batcher


    这个也没有,我的命名都是:1.bat  但就是出现这个问题
作者: 去码头整点薯条    时间: 2024-9-12 20:31

这个是我刚刚复现的结果,能运行但是跟选择的文件夹没有任何的关系
  1. @echo off
  2. cd F:\2
  3. tree
  4. tree /f > test.TXT
  5. pause
复制代码
运行结果如下:
这是文件夹的文件(为了模拟随便加了几个TXT文本)
[img][/img]

下面是批处理运行的结果
运行的开头是这样子的


结束是这样子的

作者: 去码头整点薯条    时间: 2024-9-12 20:35

回复 2# 77七


    问一下大佬,我按照你的批处理能正常运行也能导出TXT,但是如果文件夹的名称有空格之类的会无法导出只能重新修改文件夹的名字才能运行导出,我想问一下能否有其他解决方法不然有一些文件夹的名称有空格或者其他特殊的符号就需要先修改文件夹的名称然后再重新运行,还是说只能修改文件夹的名称吗
作者: 77七    时间: 2024-9-12 21:06

回复 5# 去码头整点薯条


   1楼的1-3 尤其是3,能运行,无法导出,应该是没有权限写入,所以2楼第1行代码获取管理员权限,如果确定有权限写入,可以删除这一行。
2楼代码第3行 cd /d "%~dp0" ,/d 支持跨盘符(powershell可能比较特殊,所以切换成功了),否则不写 /d ,比如,不能从c:\ 切换到 f:\ ;"%~dp0" 双引号起到转义特殊字符作用,比如 路径含有"&",如果路径单纯只含有空格,去掉双引号应该不受影响。
作者: 去码头整点薯条    时间: 2024-9-12 22:20

回复 10# 77七

按照提示去掉了双引号但还是不行,运行后直接闪退无论有没有修改双引号如果文件名有问题都会这样子,现在只有修改文件名为不含有任何字符或者空格的文件夹后运行就没有任何问题,只是这个过程比较麻烦,不清楚为什么文件夹导致这种情况下,因为按照大佬你的已经在里面加了双引号起到转义特殊字符作用那就算是文件夹有特殊符号和空格也不应该这样子(文件夹名称有一些同时包含有特殊字符和空格)
作者: 77七    时间: 2024-9-12 22:53

本帖最后由 77七 于 2024-9-12 22:54 编辑

回复 11# 去码头整点薯条


   关于双引号,提倡能加尽量加,尤其是刚接触批处理。如果代码中有写明的中文,则批处理需要保存为ansi编码。
  1. @echo off
  2. cd /d "f:\新建文件夹"
  3. tree /f > "1.txt"
  4. pause
复制代码

作者: aloha20200628    时间: 2024-9-12 23:13

本帖最后由 aloha20200628 于 2024-9-12 23:19 编辑

回复 1# 去码头整点薯条

一。先验证重定向功能是否真出现异常,可用
  1. type 1.bat>1.txt
  2. dir /b *.bat>2.txt
复制代码
等其他常用命令试试,若均出现如 tree 的问题,说明楼主的 cmd.exe 可能被 ‘修理’ 了...

二。如以上测试全被通过,再看 tree 的运行权限问题,最简单的方法是用右键菜单中的 ‘用管理员身份运行’ 直接运行 1.bat 如下
  1. @echo off & tree /f >1.txt
复制代码

作者: Five66    时间: 2024-9-12 23:36

啊?该不会你直接system32下运行的cmd命令的?还是有说有2个tree?
试试用cd /d切换目录或者tree.com /f 执行命令
作者: Batcher    时间: 2024-9-13 08:50

回复 8# 去码头整点薯条
  1. @echo off
  2. cd /d "%~dp0"
  3. tree
  4. tree /f > test.txt
  5. pause
复制代码

作者: 去码头整点薯条    时间: 2024-9-13 20:14

回复 12# 77七


    好的
作者: 去码头整点薯条    时间: 2024-9-13 20:16

回复 14# Five66
这个没有
作者: 去码头整点薯条    时间: 2024-9-13 20:18

回复 13# aloha20200628


    目前已经解决了
作者: 去码头整点薯条    时间: 2024-9-13 20:19

回复 15# Batcher

谢谢,这个也可以!但还是跟一楼的老哥一样,如果文件夹有空格或者特殊符号会无法运行,只能把文件夹修改正常的名称




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