【发布时间】:2020-10-21 17:23:17
【问题描述】:
我正在尝试制作一个简单的批处理脚本来比较两个文件并在发现差异时打开它们。 所以我使用FC来比较文件;如果没有发现差异,它将向我发送此文本:
Comparaison des fichiers FILE1 et FILE2
FC : aucune différence trouvée
如您所见,它是法语的,并且包含重音字符。那是我的问题。 到目前为止,这是我的代码:
@echo off
set "FILE1=file1path"
set "FILE2=file2path"
set "edit=editorpath"
for /F "tokens=*" %%F in ('fc /A /C /N "%FILE1%" "%FILE2%"') do (
set "DIFF=%%F"
)
set "NODIFF=FC : aucune différence trouvée"
if /I "%DIFF%"=="%NODIFF%" (
echo "no difference found"
) else (
start "" %edit% %FILE1%
start "" %edit% %FILE2%
)
问题出在“%DIFF%==%NODIFF%:这两个变量总是不同的,即使它们应该是相同的(我尝试过使用或不使用“”来进行集合和 If 比较)。为了看到这一点,我尝试回显这两个 var。这是我得到的:
echo %DIFF%
FC : aucune différence trouvée
echo %NODIFF%
FC : aucune diff├®rence trouv├®e
好像编码不一样。我找到的大多数答案是使用一些 chcp (具有不同的值)。如果我理解得很好,它应该改变编码,以便重音字符“起作用”。所以我尝试添加
chcp 65001>nul
我的代码,但后来我得到了这个结果:
echo %DIFF%
FC[?]: aucune diff[?]rence trouv[?]e
echo %NODIFF%
FC : aucune différence trouvée
所以现在第二个字符串没问题,但第一个字符串不行了。我尝试了其他数字而不是 65001,但它们只会使两个字符串都出错(而且方式不同)。
ofc 我也可以这样做:
chcp 850
echo %DIFF%
FC : aucune différence trouvée
chcp 65001
echo %NODIFF%
FC : aucune différence trouvée
但是在 IF 语句中,我不能在进行比较时更改 chcp。
有人知道如何使它工作吗?
PS:我在带有 MINGW 的 windows10 64 位上使用 cmd 而不是 POWERSHELL。
【问题讨论】:
-
似乎 file1 和 file2 有不同的编码。所以文件永远不会相同。
-
不,FC 回馈“未发现差异”,因此文件是相同的。问题是我存储在
%DIFF%中的FC 返回(即“aucune différence trouvée”)与我设置的变量%NODIFF%的编码不同。并认为%DIFF%和%NODIFF%这两个变量永远不会相同。
标签: batch-file character-encoding