中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-08-01 16:59
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [原创]sturts和jsf框架国际化的中文资源转换 查看 1,113 回复 2
楼 主 [原创]sturts和jsf框架国际化的中文资源转换 发表于 2006-06-07 20:07 ·  中国 辽宁 大连 电信
初级用户
积分 110
发帖 27
注册 2006-06-03 17:25
20年会员
UID 56491
状态 离线
这几天在论坛发帖询问,根据大家的帮助制作的批处理,主要用于sturts和jsf框架国际化的中文资源文件转换,大家看看,还有什么地方需要改正优化的?大家也不要在我以前发的帖子解答了

willsort 看看这句
if exist "%~f1\" goto error
if not exist "%~f1" goto error
本来这个是防止输入的参数是文件夹的情况,但这个就像我说的,如果在当前文件夹里有一个aa的文件,又有一个aa的文件夹,我的这两句是不是就失败了?
你提出了一个方法就是
for /f "usebackq" in ("%~f1") do ...)2>nul
这种方法是什么意思呢?不管它是文件还是目录都去操作,弄错了就屏蔽?是这个意思吗?不太明白,希望能解释一下


@echo off
cls
echo.
echo.
echo 中文资源转换批处理
echo =====================================================
echo.使用说明:
echo.
echo ⒈可以直接把要转换的源文件复制然后在批处理上点右键粘贴,
echo 生成的ApplicationResources_zh_CN.properties和messages_
echo zh_CN.properties文件会自动保存到和源文件同一目录下。
echo.
echo ⒉击批处理,然后输入源文件的完整路径,如源文件与批处理
echo 在同一目录下,则只要打源文件名就可以,同样完成转换。
echo .
echo ⒊在dos下,输入批处理名,后面加源文件的路径和文件名同样
echo 完成转换,同样,同一目录下时,可不打路径。
echo.
echo ⒋当native2ascii.exe没有在path中设置时,会自动到本地的
echo 所有驱动器查找并添加到path中,完全智能。
echo.
echo 建议把此批处理文件放到桌面上,然后使用第一种方法生成。
echo.=====================================================
:start
if "%~1"=="exit" goto end
if exist "%~dp0temp.sbl" del/f "%~dp0temp.sbl"
if exist "%~f1\" goto error
if not exist "%~f1" goto error
set x="sbl"
for %%i in (native2ascii.exe) do if exist %%~$PATH:i set x=%%~$PATH:i
if not %x% == "sbl" goto pass
echo.
echo path路径中不包括native2ascii.exe文件的路径,本程序现在自动在所有的驱动器
echo 寻找native2ascii所在目录,此过程可能需要一段时间,请稍候....
echo.
echo.
echo 搜索中......
echo.
echo.
for %%i in (C D E F G H I J K L M N O P Q R S T U V W X Y Z) do (
cd %%i:\
dir /a /b /s %%i:native2ascii.exe>%~dp0temp.sbl 2>nul && goto add
)
echo.
echo 你的电脑不存在native2ascii.exe文件,无法完成转换。
echo.
goto end
:add
for /f "tokens=*" %%i in (%~dp0temp.sbl) do (
path=%path%;%%~dpi
echo 找到%%i
)
del %~dp0temp.sbl>nul 2>nul
:pass
%~d1
cd %~p1
native2ascii -encoding gb2312 "%~f1" ApplicationResources_zh_CN.properties
copy/y ApplicationResources_zh_CN.properties messages_zh_CN.properties
echo.
echo 转换成功!!!
echo.
goto end
:error
echo.
echo.
echo 你没有输入需要转换的文件名,或该文件名不存在!
echo.
set /p file=请输入要转换的文件名(退出请输exit):
call :start %file%
:end
@echo on


与本主题相关的讨论如下:

如何获得文件的完整路径?
http://www.cn-dos.net/forum/viewthread.php?tid=20996

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

如何把环境变量path中的路径逐个读出来?
http://www.cn-dos.net/forum/viewthread.php?tid=21008

如何全盘查找某文件并把它的路径加到环境变量中
http://www.cn-dos.net/forum/viewthread.php?tid=21013

如何在批处理用命令行来改变%1的值?
http://www.cn-dos.net/forum/viewthread.php?tid=21014

如何在dir未找到时文件时不显示错误提示
http://www.cn-dos.net/forum/viewthread.php?tid=21021

[ Last edited by willsort on 2006-6-14 at 17:45 ]
xp,cmd
2 发表于 2006-06-14 18:21 ·  中国 山西 太原 中移铁通
元老会员
★★★★
Batchinger
积分 4,432
发帖 1,512
注册 2002-10-18 00:00
23年会员
UID 19
性别 男
状态 离线
Re wentimao:

非常抱歉!将兄的这篇原创主题忽略了如此之久!现已将主题稍作整理,修改标题,红色下划线高亮,奖励16积分。

关于同名文件和文件夹的存在性判断,我仍持上文相关回复中 [2] 的观点,不要去理会它,除非真有理会它的必要。

关于我后来提出的 for/f 方案大抵如兄所说:for /f "usebackq"要求("")内必须是文件名,否则将无法读取其文本内容,从而显示错误信息,而后的)2>nul 可以将错误信息屏蔽。

关于这个方案存在一些缺陷,已知的是,若将文件存在后的操作放在 do 后,将可能因为文件存在多行文本而被执行多次。改进后的方案如下:

for /f "usebackq" %%f in ("%~f1") do set) >nul 2>nul || echo 不存在文件 %~f1

Re Others:

感到比较奇怪的是,无论是否存在 %~f1 , for /f 都不修改 %errorlevel% ,但是其后的 && 或者 || 则仍然是正常有效的,这是否意味着,&& 和 || 的条件并非依赖于 %errorlevel%?
※ Batchinger 致 Bat Fans:请访问 批处理编程的异类 ,欢迎交流与共享批处理编程心得!
3 发表于 2006-06-15 07:54 ·  中国 辽宁 大连 电信
初级用户
积分 110
发帖 27
注册 2006-06-03 17:25
20年会员
UID 56491
状态 离线
我把查找那段代码按一位仁兄的方法修改,这样不用创建临时文件,觉得方便不少 


set x="sbl"
for %%i in (native2ascii.exe) do if exist %%~$PATH:i set x=%%~$PATH:i
if not %x% == "sbl" goto :pass
echo.
echo path路径中不包括native2ascii.exe文件的路径,本程序现在自动在所有的驱动器
echo 寻找native2ascii所在目录,此过程可能需要一段时间,请稍候....
echo.
echo.
echo 搜索中......
echo.
echo.
for %%i in (C D E F G H I J K L M N O P Q R S T U V W X Y Z) do (
(for /f "delims=" %%p in ('dir /a /b /s %%i:\native2ascii.exe') do (
echo 找到%%p
set path=%path%;%%~dpp&&goto :pass
)) 2>nul
)
echo.
echo 你的电脑不存在native2ascii.exe文件,无法完成转换。
echo.
goto :end
xp,cmd
论坛跳转: