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

批处理文件不能起什么样的文件名?

下面这个代码保存为ping.bat做文件名时无法正常运行。
存为ping.bat
  1. ping 192.168.0.1
  2. pause
复制代码
刚开始我以为是电脑中毒什么的,就进行全盘扫描,结果一个病毒都扫不出来。
然后又重新安装了操作系统,故障依旧。
于是,我就百度,谷歌,论坛四处搜索,却怎么都找不到此类关相的问题。
就在绝望之际,随手把文件名改成1.bat,结果......         运行完全正常
今天在论坛发贴,只是想问一下,平时在给ba起文件名时都要注意些什么,不能起哪些名字。
现在只知道不能用

ping.bat

希望楼下接贴,给出其它不可以使用的文件名......

简单的说,应该是保留字吧,由其是在PATH下,当然还有一些其它的一类乱码名,畸形文件等
枫中残雪:风停了,我的心却在动,让我心中的寒意走向远方

TOP

还有不要用&作为脚本名
比如一些很特殊的很恶心的文件名:
  1. &for %a in (t e s t) do md %a&rem.bat
复制代码
还有一个更好玩的:(要求 %homedrive% 为 c:)
  1. &cls&@set;c=b&echo;b&(for;%a;in;(a;t;h;o;m;e)do;@doskey&cls&call;call;set;c=%;%^homedrive%%;c%=%;c%%a%&call;echo;%;c%)&pause.bat
复制代码
用了不少技巧来构造这个文件名,在双击(执行脚本内容)和调用时(执行文件名内容)的效果不同...

TOP

回复 6# FOR


    知道了原因就好办了,把里面的代码连后缀名一起打进去就行了。
文件名用 ping.bat
  1. ping.exe 192.168.0.1
  2. pause
复制代码

TOP

准确的说是不要使用bat中使用的外部命令作bat的文件名
比如你的代码是
@echo off
findstr "abc" a.txt
pause
如果文件名是 findstr 则不行
如果代码是
@echo off
find "abc" a.txt
pause
那么文件名就不能是 find 但可以是 findstr
bat运行命令时时,会先在bat所在目录寻找该命令名的可执行文件,如:cmd、bat、exe等等。。。
以第一个例子为例,当运行findstr命令时,bat会先在所在目录找寻文件名为findstr的可执行文件,而你的文件名若是 findstr.bat 那么 就不会执行findstr "abc" a.txt语句,而是执行findstr.bat了,如此反复形成死循环,若所在目录没有名为findstr的可执行文件,则会到path变量中去寻找,若有则执行,若还没有,则会显示findstr不是内部或外部命令。。。

TOP

本帖最后由 BAT1 于 2011-12-2 15:04 编辑

二楼说  “只要不使用bat代码中使用的命令作文件名”
dir.bat
  1. dir *.txt
  2. echo 现在代码中用了dir 也可以正常运行!
  3. pause
复制代码
四楼说  “不要用外部命令来命名批处理文件”
ping.bat
  1. echo 现在用了ping也可以运行!
  2. pause
复制代码
本来想理清思路的,结果现在思路越理越混乱了。

TOP

准确来说是“不要用外部命令来命名批处理文件”
dir.bat
  1. @echo off
  2. dir *.txt
  3. pause>nul
复制代码
这里不会循环,因为dir是内部命令。

TOP

谢谢   for

TOP

只要不使用bat代码中使用的命令作文件名都应该可以,否则会陷入死循环。
比如你代码是
dir/b *.*
find "abc" a.txt
那么你的文件名就不能是 dir 或 find

TOP

返回列表