中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 帮我修改完成一下这个批处理
作者:
标题: 帮我修改完成一下这个批处理 上一主题 | 下一主题
wentimao
初级用户





积分 110
发帖 27
注册 2006-6-3
状态 离线
『楼 主』:  帮我修改完成一下这个批处理

基本功能已经实现,但有个问请看下帖

[ Last edited by wentimao on 2006-6-4 at 13:59 ]



xp,cmd
2006-6-3 21:21
查看资料  发短消息 网志   编辑帖子  回复  引用回复
wentimao
初级用户





积分 110
发帖 27
注册 2006-6-3
状态 离线
『第 2 楼』:  

以下是我自己完成的bat,但是有几个问题还要请教
1. dir/s/a/b c:native2ascii.exe>%~dp0temp.sbl如果没找到文件的信息如何不显示
2.if exist "%~f1\" goto error
if not exist "%~f1" goto error
这两行,对于文件和目录都存在时,好象就不能准确的判断文件是否存在,如何判断文件的存在呢?
3 dir找不到文件时,有没有什么错误代码?来获知找到还是没找到?

再就是希望大家把我的代码优化一下,我太菜了,有很多不够最简化




@echo off

rem 判断是否有第二个参数,并是不是设置path路径的?

if exist "%~dp0temp.sbl"  del/f "%~dp0temp.sbl"

if  "%~dp2"=="" goto pass

if exist "%~dp2native2ascii.exe" (
set path=%path%;%~dp2
echo 添加目录到path中成功
)


rem 判断是文件还是上目录,因为要对文件操作,判断%1有效性
:pass
if exist "%~f1\" goto error
if not exist "%~f1" goto error
%~d1
cd %~p1


rem 初始化参数x,然后去path设置的目录找有没有需要的文件
set x="sbl"
for %%i in (native2ascii.exe) do if exist %%~$PATH:i set x=%%~$PATH:i

if not %x% == "sbl" goto pass2
echo path路径中不包括native2ascii.exe文件的路径,本程序现在自动搜索驱动器C:、D:、E:,       
echo 寻找native2ascii所在目录,此过程可能需要一段时间,请稍候....
echo.
echo.
echo 搜索中......
echo.
echo.
dir/s/a/b c:native2ascii.exe>%~dp0temp.sbl
dir/s/a/b d:native2ascii.exe>>%~dp0temp.sbl
dir/s/a/b e:native2ascii.exe>>%~dp0temp.sbl


rem 找不到退出,否则重新执行bat,并根据参数2设置目录

for /f %%i in (%~dp1temp.sbl) do set aa=%%i
if "%aa%"=="" (
echo 你的电脑不存在native2ascii.exe文件,无法完成转换。
goto end
)
for /f %%i in (%~dp1temp.sbl) do %0 %1 %%~dpi


rem 执行真正的操作
:pass2
native2ascii -encoding gb2312 "%~f1" ApplicationResources_zh_CN.properties
echo 转换成功!!!

goto end

rem 参数%1无效时,重输,然后重启bat
:error
echo.
echo.
echo 你没有输入需要转换的文件名,或该文件名不存在!
echo.

set /p file=请输入要转换的文件名(退出请输exit):
%0 %file%

rem 结束
:end
pause
@echo on

[ Last edited by wentimao on 2006-6-4 at 14:01 ]



xp,cmd
2006-6-4 12:56
查看资料  发短消息 网志   编辑帖子  回复  引用回复
LanCat
中级用户





积分 288
发帖 78
注册 2003-11-19
状态 离线
『第 3 楼』:  

第一个问题,可以在 dir 前加 if exist 判断。
第二个问题,目录为 if exist c:\winnt\nul,文件为 if exist c:\winnt\*.*
第三个问题,即然都知道用 if exist 命令了,这个问题自然就解决了。

2006-6-4 21:21
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
wentimao
初级用户





积分 110
发帖 27
注册 2006-6-3
状态 离线
『第 4 楼』:  

如果在同一个目录下,有个文件叫abc,同时有个目录叫abc,你用什么去判断文件和目录都是存在的?



xp,cmd
2006-6-4 22:23
查看资料  发短消息 网志   编辑帖子  回复  引用回复
Jneny
高级用户

中國DOS聯盟常任參議员


积分 686
发帖 318
注册 2005-11-4
状态 离线
『第 5 楼』:  

判断目录应该是 if exist X:\abc\nul dir abc exit
判断文件 if exist X:\abc echo file abc exist



. 繽紛色彩閃出的美麗是因為它沒有分開每種色彩...>/

    我的百度空间: BEYOND超越        为什么用DOS  
2006-6-5 02:54
查看资料  发送邮件  发短消息 网志  OICQ (290256061)  编辑帖子  回复  引用回复
不得不爱
超级版主

我爱DOS


积分 5310
发帖 2044
注册 2005-9-26
来自 四川南充
状态 离线
『第 6 楼』:  

dir/s/a/b c:native2ascii.exe>%~dp0temp.sbl 2>nul
如果没找到文件就不会的信息就不显示!



我的网络U盘 我的网络第2个U盘
论坛软件下载链接
灵雨飘零论坛  
论坛新手必读,所有人的基本行为准则
刷QQ空间人气、留言的小软件
2006-6-6 11:31
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
willsort
元老会员

Batchinger


积分 4432
发帖 1512
注册 2002-10-18
状态 离线
『第 7 楼』:  

Re wentimao:

      请楼主注意发表主题的秩序。

      主题的标题乃是“题眼”,如果随意处理会导致答复者对主题留下比较坏的第一印象,而且毫无意义的主题,将使后来者难于借鉴你解决问题的经验。

      对于求助性主题,一个主题等同于一个问题,所有与某一特定问题相关的问答都应集中在一个主题中,而与此无关的问答,则应另发新主题。多个问题集中于一个主题,将使答复的重复使用率大大降低,而且也对标题的准确性和针对性提出了挑战。

      请不要删除已经解决的问题,这样可能会使后面的答复变成空中楼阁;与此相反地,如果你的问题已经解决了,即时是你自己解决的,也请最好回帖告知大家你采用的是何种方法和方案。

      第一个问题,你已经用新主题[1]发表并且得到正确回复,这里不再赘述。

      第二个问题,你也曾发表新主题[2]提及,我将在彼主题中进行回复,5楼的答复存在一些问题。

      第三个问题,在NT下的cmd中,dir是有errorlevel的,未找到文件时为1,成功时为0;

[1]这个问题如何解决?
http://www.cn-dos.net/forum/viewthread.php?tid=21021

[2]如何判断参数是文件还是目录
http://www.cn-dos.net/forum/viewthread.php?tid=20999

[ Last edited by willsort on 2006-6-6 at 18:29 ]



※ Batchinger 致 Bat Fans:请访问 [讨论]批处理编程的异类 ,欢迎交流与共享批处理编程心得!
2006-6-6 18:19
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: