如何解决命令提示符下的变音符号?

科比拉

简化的问题:

我的计算机上有一个名为Bíblia sagrada.exe(请注意í的文件C:\

当我打开命令提示符C:\并执行时dir /b /on B*.*,它将返回:

Bíblia sagrada.exe

即,变音符号没有问题。

但是,当我执行dir /b /on B*.*> c:\ a.txt并c:\a.txt使用记事本打开时,它将变为:

B¡blia sagrada.exe

即,它替换í¡

而且,如果我执行for /f "delims=" %i in ('dir /b /on B*.*') do %i > %i.txt该操作,则会在文件名中输入正确的名称,但是在其中,文本仍然是错误的,即,

文档名称:

Bíblia sagrada.exe.txt

内容:

B¡blia sagrada.exe

这是怎么回事?

PS:

真正的问题

对我来说,这个问题比我第一次编辑时所报告的要严重,因为我阅读了txt文件的内容以创建.vbs脚本,然后执行它。尝试执行时,“它不理解”它指向“Bíbliasagrada.exe”,并且不执行该程序...即,我在d:\ atalhizador \ atalhizador.bat上创建了一个.bat文件:

@echo off

::locais
set drvbak=
set drvprogrs=
set pathbak=%cd%
set pathabove=
set pathprogrs=%userprofile%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs

::identificador da pasta do programa no menu iniciar
set id=_pext1

::determina drives de acordo com paths
for /f "delims=" %%z in ("%pathbak%")    do set drvbak=%%~dz
for /f "delims=" %%z in ("%pathprogrs%") do set drvprogrs=%%~dz

::pega caminho superior
cd..
set pathabove=%cd%
cd %pathbak%

cls
echo.***************
echo.* ATALHIZADOR *
echo.***************
echo.
echo.Deseja realmente executar o atalhizador para a pasta:
cd..
echo.  %cd%
cd %pathbak%
echo. [s/n]:
set /p ___o=
if not "%___o%"=="s" if not "%___o%"=="S" goto end

echo.
echo.Criando os atalhos...
for /f "delims=" %%a in ('dir /b /ad /on ..') do (
  echo.- pasta "%%a"...
  echo.  ^|-- buscando arquivos atalhizaveis...
  if not exist "temp" mkdir "temp"
  dir /b /on "..\%%a\*.exe" 1>temp\busca.txt 2>temp\erros.txt
  for /f "delims=" %%b in (temp\busca.txt) do (
    echo.      ^|-- criando atalho para %%b

    for /l %%z in (1,1,1) do set __temp__=

    if not exist "%pathprogrs%\%id%" mkdir "%pathprogrs%\%id%"
    if not exist "%pathprogrs%\%id%\%%a" mkdir "%pathprogrs%\%id%\%%a"

    echo.Set oWS = WScript.CreateObject^("WScript.Shell"^) > temp\%%~na-%%~nb.vbs
    echo.sLinkFile = "%pathprogrs%\%id%\%%a\%%b.lnk" >> temp\%%~na-%%~nb.vbs
    echo.Set oLink = oWS.CreateShortcut^(sLinkFile^) >> temp\%%~na-%%~nb.vbs
    echo.oLink.TargetPath = "%pathabove%\%%a\%%b" >> temp\%%~na-%%~nb.vbs
    echo.oLink.Save >> temp\%%~na-%%~nb.vbs

    cscript /nologo temp\%%~na-%%~nb.vbs
  )
)

:end
%drvbak%
cd %pathbak%

pause
@echo off

提到的“Bíbliasagrada.exe”在d:\Bíbliasagrada中。

生成的.vbs文件在下面(假设d:上只有这两个目录),文件名D:\ atalhizador \ temp \BíbliaSagrada-BíbliaSagrada.vbs:

Set oWS = WScript.CreateObject("WScript.Shell") 
sLinkFile = "C:\Users\Ubirajara\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\_pext1\B¡blia Sagrada\B¡blia Sagrada.exe.lnk" 
Set oLink = oWS.CreateShortcut(sLinkFile) 
oLink.TargetPath = "D:\_pext1\B¡blia Sagrada\B¡blia Sagrada.exe" 
oLink.Save 

问题?未创建快捷方式,因为它无法识别“ sLinkFile =“ C:\ Users \ Ubirajara \ AppData \ Roaming \ Microsoft \ Windows \开始菜单\ Programs_pext1 \B¡bliaSagrada \B¡bliaSagrada.exe.lnk” 。

如果我不使用变音符号,就不会发生这种情况,但实际上我有很多带有该信号的文件夹和文件...

如何更正它以允许在.vbs文件上正确写入?

PS2:

我尝试单独或一起执行以下命令,但没有成功:

cmd /u

chcp 860

chcp 1200

mode con cp select=860

mode con cp select=1200

我也尝试使用cmd光栅字体和其他可用字体...

哈里奇

将代码页设置为UTF-8应该会有所帮助:

chcp 65001

dir结果将随后在UTF8编码。

如果VBS无法按原样理解它,则要在Windows下将文件自动识别为UTF8,您需要在文件前加上UTF8 BOM字节前缀

0xEF, 0xBB, 0xBF

然后,您可以从包含BOM的文件开始并追加到该文件,而不是写入:

chcp 65001
copy EFBBBF.txt a.txt
dir /b /on B*.* >> a.txt

或者,您可以copy /b用来串联文件。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章