我需要有关批处理文件的帮助,该文件在旧版本的 Windows 10 上完美运行,但在稍新的版本上则完全无法运行



我有这批来比较两个文件的修改日期,这两个文件在旧版本的 Windows 10'10.0.10240' 上效果很好,但在稍新版本的 Windows 10'10.0.17134.1304' 上则完全不起作用,所以我在这里错过了什么?稍新版本的 Windows 10 是否需要安装任何其他软件?

批处理文件如下所示:

@echo off
Set _File1="D:Steamsteamappscommondota 2 betagamedotabinwin64client.dll"
Set _File2="D:Programsclient.dll"
For /F "Delims=" %%I In ('xcopy /DHYL %_File1% %_File2% ^|Findstr /I "File"') Do set /a _Newer=%%I 2>Nul
If %_Newer%==1 (Set _Newer=%_File1%) Else (Set _Newer=%_File2%)
Echo The newest file is %_Newer%
Pause

在"Windows 10.0.10240"上完美运行,但在"Windows 10.0.17134.1304"上无法启动(仅打开几分之一秒,然后立即关闭)

通过在XCOPY中包含/Q选项,无需通过管道传递到FINDSTR

因此,您可以使用所选FOR /F想法的这种修改:

@Echo Off
SetLocal EnableExtensions DisableDelayedExpansion
Set "_File1=D:Steamsteamappscommondota 2 betagamedotabinwin64client.dll"
Set "_File2=D:Programsclient.dll"
For %%G In ("%_File1%" "%_File2%") Do If Not Exist %%G (Echo A file is missing.& GoTo :EndIt) 
Set "_Newer="
For /F %%G In ('%SystemRoot%System32xcopy.exe "%_File1%" "%_File2%" /DHLQY 2^>NUL') Do If %%G Equ 1 (Set "_Newer=%_File1%") Else Set "_Newer=%_File2% or neither"
If Not Defined _Newer (Echo An error occurred.& GoTo :EndIt)
Echo %_Newer% is the newer file.
:EndIt
Pause
EndLocal
GoTo :EOF

我添加了一些额外的"调试"代码,以帮助您确定每个不同系统版本上发生的情况,并纠正您的假设,即0意味着%_File2%是更新的,当两者可能带有相同的日期戳时。

您的问题似乎是来自xcopy的响应,通过findstr过滤将1 File(s)0 File(s),并且此字符串应用于newer

然后,您的if语句解析为

if 1 File(s)==1 ....

所以你得到一个语法错误。

要解决此问题,请从for /f中删除"delims=",然后使用包含空格的默认分隔符并返回默认的第一个标记,即10

唯一真正的难题是它在早期的 Win10 中是如何工作的。

必修讲道:

使用set "var=value"设置字符串值 - 这样可以避免尾随空格引起的问题。不要分配终端、空格或"- 从元素构建路径名 - 违反直觉,这可能会使过程更容易。

使用点单击和咯咯笑方法执行批处理时,如果发现语法错误或脚本运行完成,批处理窗口将关闭。您可以在语句和主页后面加上一个pause,但最好打开一个"命令提示符"并从那里运行批处理,以便窗口保持打开状态并显示任何(错误)消息。

---校订---

经过一番实验后,我仔细观察了一下代码。

"delims="传递我描述的字符串 - 但是 -set /a(而不是我预期的,set)会抓住那个数字,然后失败(因此2>nul

)所以 - 我发现如果file2不存在,脚本将停止等待对xcopy的问题"file2 是文件还是目录?

这可能是单击批处理失败的原因。

所以 - 我建议

set "_newer="
if exist %_file1% set "newer=1"&if exist %_file2% for ...
if defined _newer (if _%_newer%==1....) else Echo %_file1% not found

相关内容

  • 没有找到相关文章

最新更新