使用带有重音符号的字符来管理路径

4
在批处理中,如果指定的路径名包含重音符号,那么在剥离路径中的所有重音符号时,文件系统中找不到文件。然而,我需要处理带有重音符号的路径。有没有办法解决这个问题?如果您需要知道我的操作系统,我使用的是SEVEN 32。谢谢。

我有一些包含西里尔字母的路径和文件名,并且对它们没有问题。你能否提供一些例子?你用什么编辑器进行批处理编程?你能够在for循环中处理文件名吗,例如 for %%i in (*) do echo(%%~i - Endoro
我使用的编辑器要么是Bloc-notes,要么是Notepad++。以下是编写的代码! @echo off&setlocal for /f "tokens=2* delims== " %%x in (Myfile) do ( if /i "%%x"=="dir1" set "path1=%%y" if /i "%%x"=="dir2" set "path2=%%y" )echo %path1% echo %path2%for /f "tokens=*" %%x in ('findstr /v /C:" " Myfile') do (echo "%path1%%%x.txt"========================================== Call second.bat "%path1%%%x.txt") - new
一旦%path1%或%path2%包含重音字符,文件就找不到了,因此调用second.bat“%path1%%%x.txt”是有问题的。如果我将路径1和路径2中的重音字符删除,则可以解决该问题。但是我不想这样做。谢谢。 - new
你能在问题中发布一些这些文件名吗?我可以轻松地创建带有外文字符(如ė、â、Ú、ø)的文件名,并通过批处理来处理它们。 - Endoro
4个回答

5

默认情况下,批处理配置不能打印Unicode字符,但可以识别这些字符并使用它们。

这意味着你无法打印“ú”,但是你可以访问名为“ú”的文件夹或者触碰名为“ú”的文件。

所以,如果你的脚本无法访问带有重音符号的文件,可能的原因是你脚本的编码不是ANSI。因此,在记事本中打开脚本,并确保使用ANSI编码保存(不要用utf-8或unicode)。

例如:

@echo off

CHCP 850 >NUL

for %%# in (*.txt) do (

    Echo [+] reading File: .\%%~nx# | MORE
    Type "%%~nx#"
) 

Pause>NUL

输出:

[+] reading File: .\áéíóúàèìòù ñ Ñ ç Ç.txt

This is the text content of my file with ISO-Latin characters

如果您想在CMD中打印带重音的字符,则需要进行字符转换,这可以解决问题:

@echo off
CHCP 850 >NUL
copy con Mychars.txt

在该提示框中,您需要输入想要的字符,例如"éíóú",然后您将获得一个名为"Mychars.txt"的文本文件,其中包含该内容:

 ‚¡¢£

现在,您可以使用这些字符来打印带重音符号的字符:
@echo off
echo ‚¡¢£
Pause>NUL

输出:

éíóú

提示1:请记得以ANSI编码保存脚本并执行所有我说过的操作。

提示2:请注意我使用了CHCP 850命令,这意味着CMD的代码页。默认情况下,CMD使用850代码页,但我使用默认的1250代码页启动CMD以避免所有这些问题,因此在我的示例中,我需要使用代码页850来展示给您。

您可以通过注册表键设置默认的CMD代码页:

REG ADD "HKCU\Software\Microsoft\Command Processor" /V "Autorun" /T "REG_SZ" /D "chcp 1250 >NUL" /F >NUL 2>&1

您可以在这里阅读有关代码页的信息:http://msdn.microsoft.com/en-us/library/cc195064.aspx

(说明:该文档介绍了有关代码页的信息)

1
目前,我只是在记事本的首选项中将UTF8更改为ANSI,保存文件,打开它以查看ANSI是否是默认编码,并关闭它。然而,脚本仍然无法通过其路径访问该文件。谢谢。 - new
这是正常的吗?还是我必须按照您建议的方式才能访问该文件? - new
我注意到在vbsscipt中我没有这个问题。实际上,包含重音符号的路径的文件是可以被找到的。但在Windows批处理中则不是这种情况。 - new
2
太好了!现在它运行得很好。你让我免除了一项沉重的责任。非常感谢你。 - new
这对我没有起作用,路径仍然不正确(重音字符被替换为其他字符),我所做的是将代码页更改为1252。 - churchill

2

这不起作用:

@echo off
start "" "C:\Users\dmb3419\Documents\dev\ééééééééé"

这个有效:

@echo off
chcp 1252
start "" "C:\Users\dmb3419\Documents\dev\ééééééééé"

2

我曾经遇到过使用 .bat 和 xcopy 命令时,路径名中包含法语重音符号的类似问题。

具体情况如下:

@echo off
chcp 1252

你可以帮我处理这个问题,.bat文件中的口音被正确识别。在MS server2012 R2 cmd.exe下运行。


0
请看下面,您的提示解决了我的问题,而不会混淆它与外来代码:
CHCP 1252
call "C:\Program Files\Microsoft Office\root\Office16\EXCEL.EXE" "Z:\CYRO\ARTE\ArteRH Dicionário de Dados.xlsx"
call "C:\Program Files\Microsoft Office\root\Office16\EXCEL.EXE" "Z:\CYRO\ARTE\Unificação\01 - MATERIAL APOIO\PADRAO_TABELA_CONVERSAO.xlsx"
希望能帮助其他人!
最好的问候。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接