标题: [文件操作] 纯批处理能否对包含“多国语言字符”的文件路径操作? [打印本页]
作者: yu2n 时间: 2013-4-18 19:23 标题: 纯批处理能否对包含“多国语言字符”的文件路径操作?
本帖最后由 yu2n 于 2013-4-18 19:42 编辑
文件夹同步操作:
call :del_difference 操作出现错误:
简体系统下,简体中文路径正常操作。
繁体系统下,简体中文路径无法操作,提示找不到路径。
call :xcopy_sh 操作则没有问题
完整代码如下:- cls & @echo off & color 1f
- title Lol Sync [2013-04-16]
-
- :: sync folder
- if /i "L@ALICIA-PC" equ "%username%@%computername%" (
- call :xcopy_sh "\\yu2n-pc\d\game\LOLBox2" "D:\Game\LOLBox2"
- call :xcopy_sh "\\yu2n-pc\d\game\英雄联盟" "D:\Game\英雄联盟"
- )
- call :done
- goto :eof
-
-
- :: done tips
- :done
- echo.
- echo.
- echo ^> Sync is done!
- echo.
- color 2a
- pause
- goto :eof
-
-
- :: xcopy sh
- :xcopy_sh
- set "path_src=%~1"
- set "path_des=%~2"
- dir /ad /b "%path_src%" >nul 2>nul || goto :eof
- dir /ad /b "%path_des%" >nul 2>nul || goto :eof
- echo + %path_src%
- echo -^> %path_des%
- xcopy "%path_src%" "%path_des%" /D /E /V /C /I /H /R /Y
- cls
- echo delete difference folder ^& file
- call :del_difference "%path_src%" "%path_des%"
- echo.
- goto :eof
-
-
- :: delete difference folder & file
- :del_difference
- set "path_src=%~1"
- set "path_des=%~2"
- dir /ad /b "%path_src%" >nul 2>nul || goto :eof
- dir /ad /b "%path_des%" >nul 2>nul || goto :eof
- setlocal enableDelayedExpansion
- for /f "delims=" %%i in ('dir /ad /b /s "%path_des%"') do (
- set "path_sub=%%~i"
- set "path_cut=!path_sub:%path_des%=!"
- set "path_tmp=%path_src%!path_cut!"
- if not exist "!path_tmp!" (
- echo,%%i
- echo,!path_tmp!
- rd /q /s "%%~i"
- )
- )
- for /f "delims=" %%i in ('dir /a-d /b /s "%path_des%"') do (
- set "path_sub=%%~i"
- set "path_cut=!path_sub:%path_des%=!"
- set "path_tmp=%path_src%!path_cut!"
- if not exist "!path_tmp!" (
- echo,%%i
- echo,!path_tmp!
- del /q /s /f "%%~i"
- )
- )
- endlocal
- goto :eof
复制代码
作者: Demon 时间: 2013-4-18 20:27
chcp 936
作者: yu2n 时间: 2013-4-18 21:05
本帖最后由 yu2n 于 2013-4-18 21:06 编辑
回复 2# Demon
Demon,请问有自适应的方法吗,在不确定字符编码的情况下:
比如,有一个目录,其中有若干文件,文件(文件夹)名含日文、韩文、简体中文……
如何让程序自己决定对应的 chcp 码呢?
还是,使用VBS来完成这种需求。
作者: Demon 时间: 2013-4-18 21:08
你的批处理是什么编码就chcp什么代码页
作者: yu2n 时间: 2013-4-18 21:10
回复 4# Demon
谢谢解答,我明天上班用繁体XP试试。
作者: yu2n 时间: 2013-4-19 08:25
本帖最后由 yu2n 于 2013-4-19 08:35 编辑
回复 4# Demon
繁體XP無法指定 CHCP 936,錯誤提示如下:复制代码
繁體XP執行BAT中簡體中文路徑錯誤提示依舊,如下:- \\ntfile\doc$\Setup\tool\patch\2000 ?失 hal.dll 无法启动(安装其他启动
- 工具?件后)\disk_C
- \\ntf\div$\setup\tool\patch\2000 ?失 hal.dll 无法启动(安装其他启动工具?件后
- )\disk_C
- 檔案名稱、目錄名稱或磁碟區標籤語法錯誤。
复制代码
設置 CHCP 936,設置失敗,能執行後續代碼,執行后仍提示“檔案名稱、目錄名稱或磁碟區標籤語法錯誤”。
設置 CHCP 850、CHCP 950,設置成功,執行后仍提示“檔案名稱、目錄名稱或磁碟區標籤語法錯誤”。
設置 CHCP 65001,設置成功,但不能執行後續代碼。
作者: Demon 时间: 2013-4-19 11:04
- @echo off
- chcp 950
- echo 英雄联盟
- pause
复制代码
作者: yu2n 时间: 2013-4-19 15:05
回复 7# Demon
繁體XP 32 直接執行CMD命令复制代码
結果如下:- D:\patch\2000 遗失 hal.dll 无法启动(安装其他启动工具软件后)
- D:\patch\Microsoft_DotNetFXCHS2.0.exe
- D:\patch\Reg MSMAPI32.OCX
- D:\patch\2000 遗失 hal.dll 无法启动(安装其他启动工具软件后)\disk_C
- D:\patch\2000 遗失 hal.dll 无法启动(安装其他启动工具软件后)\ReadMe.txt
- D:\patch\2000 遗失 hal.dll 无法启动(安装其他启动工具软件后)\disk_C\boot.ini
- D:\patch\2000 遗失 hal.dll 无法启动(安装其他启动工具软件后)\disk_C\bootfont.bin
- D:\patch\2000 遗失 hal.dll 无法启动(安装其他启动工具软件后)\disk_C\maxldr.mbr
- D:\patch\2000 遗失 hal.dll 无法启动(安装其他启动工具软件后)\disk_C\mxldr
- D:\patch\2000 遗失 hal.dll 无法启动(安装其他启动工具软件后)\disk_C\NTDETECT.COM
- D:\patch\2000 遗失 hal.dll 无法启动(安装其他启动工具软件后)\disk_C\ntldr
- D:\patch\2000 遗失 hal.dll 无法启动(安装其他启动工具软件后)\disk_C\winnt
- D:\patch\2000 遗失 hal.dll 无法启动(安装其他启动工具软件后)\disk_C\winnt\system3
- 2
- D:\patch\2000 遗失 hal.dll 无法启动(安装其他启动工具软件后)\disk_C\winnt\system3
- 2\hal.dll
- D:\patch\Reg MSMAPI32.OCX\MSMAPI32.OCX
- D:\patch\Reg MSMAPI32.OCX\psexec.exe
- D:\patch\Reg MSMAPI32.OCX\Reg MSMAPI32.OCX.bat
- D:\patch\Reg MSMAPI32.OCX\Reg MSMAPI32.OCX.log
复制代码
執行 test.bat- @echo off
- chcp 950
- FOR /F "delims=" %%i in ('dir /a /b /s "D:\patch"') do (
- echo,%%i
- if not exist "%%~i" (echo,Miss)
- )
- pause
复制代码
結果如下:- 使用中字碼頁: 950
- D:\patch\2000 ?失 hal.dll 无法启动(安装其他启动工具?件后)
- D:\patch\Microsoft_DotNetFXCHS2.0.exe
- D:\patch\Reg MSMAPI32.OCX
- D:\patch\2000 ?失 hal.dll 无法启动(安装其他启动工具?件后)\disk_C
- Miss
- D:\patch\2000 ?失 hal.dll 无法启动(安装其他启动工具?件后)\ReadMe.txt
- Miss
- D:\patch\2000 ?失 hal.dll 无法启动(安装其他启动工具?件后)\disk_C\boot.ini
- Miss
- D:\patch\2000 ?失 hal.dll 无法启动(安装其他启动工具?件后)\disk_C\bootfont.bin
- Miss
- D:\patch\2000 ?失 hal.dll 无法启动(安装其他启动工具?件后)\disk_C\maxldr.mbr
- Miss
- D:\patch\2000 ?失 hal.dll 无法启动(安装其他启动工具?件后)\disk_C\mxldr
- Miss
- D:\patch\2000 ?失 hal.dll 无法启动(安装其他启动工具?件后)\disk_C\NTDETECT.COM
- Miss
- D:\patch\2000 ?失 hal.dll 无法启动(安装其他启动工具?件后)\disk_C\ntldr
- Miss
- D:\patch\2000 ?失 hal.dll 无法启动(安装其他启动工具?件后)\disk_C\winnt
- Miss
- D:\patch\2000 ?失 hal.dll 无法启动(安装其他启动工具?件后)\disk_C\winnt\system32
- Miss
- D:\patch\2000 ?失 hal.dll 无法启动(安装其他启动工具?件后)\disk_C\winnt\system32\
- hal.dll
- Miss
- D:\patch\Reg MSMAPI32.OCX\MSMAPI32.OCX
- D:\patch\Reg MSMAPI32.OCX\psexec.exe
- D:\patch\Reg MSMAPI32.OCX\Reg MSMAPI32.OCX.bat
- D:\patch\Reg MSMAPI32.OCX\Reg MSMAPI32.OCX.log
- 請按任意鍵繼續 . . .
复制代码
作者: CrLf 时间: 2013-4-19 16:36
试试将路径保存在一个 unicode 文本中,格式为:复制代码
然后在 bat 用这个办法读取:- @echo off
- for /f "delims=" %%a in ('type 路径列表.txt') do set "%%a"
- echo "%路径1%"
- echo "%路径2%"
- pause
复制代码
因为你的繁体环境用的可能不是 gb2312,用 gb2312 保存的文本可能会被错误解析,所以让 type 命令来将通用的 unicode 转为繁体编码也许能够搞定。只是猜测,权且试试呗。
作者: CrLf 时间: 2013-4-19 18:15
回复 6# yu2n
設置 CHCP 65001,設置成功,但不能執行後續代碼。
如果能设置 65001 的话,可以直接将含有路径的 bat 保存为 utf-8 格式,然后在脚本头部 chcp 65001,见:http://bbs.bathome.net/viewthread.php?tid=12824
作者: Demon 时间: 2013-4-20 00:04
回复 Demon
繁體XP 32 直接執行CMD命令結果如下:執行 test.bat結果如下:
yu2n 发表于 2013-4-19 15:05
不要用for /f- @echo off
- for /r D:\patch %%i in (*.*) do (
- echo,%%i
- if not exist "%%~i" (echo,Miss)
- )
- pause
复制代码
作者: Demon 时间: 2013-4-20 00:05
回复 yu2n
如果能设置 65001 的话,可以直接将含有路径的 bat 保存为 utf-8 格式,然后在脚本 ...
CrLf 发表于 2013-4-19 18:15
我记得以前跟你说过,XP的CMD有BUG,不能chcp 65001
作者: CrLf 时间: 2013-4-20 00:17
回复 12# Demon
不是 bug,只是 xp 不自带。但是楼主在 6 楼说繁体环境下切换到 65001 成功,所以想来是可以用的
作者: Demon 时间: 2013-4-20 00:19
回复 Demon
不是 bug,只是 xp 不自带。但是楼主在 6 楼说繁体环境下切换到 65001 成功,所以想 ...
CrLf 发表于 2013-4-20 00:17
你不妨试试
作者: CrLf 时间: 2013-4-20 00:21
回复 14# Demon
我勒个去还真是,早先以为是不自带,原来是和 37 一样变态。
作者: Demon 时间: 2013-4-20 00:23
回复 Demon
我勒个去还真是,早先以为是不自带,原来是和 37 一样变态。
CrLf 发表于 2013-4-20 00:21
37可以用
作者: yu2n 时间: 2013-4-20 00:56
回复 11# Demon
多谢答疑,等周一上班再试试。多谢了。
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |