1

在 Windows 7 中,制作了一个 bat 文件:

rem 设置 UD_LOG_FILE_PATH=%temp%\defrag_native.log
C:
cd \Windows\System32
udefrag.exe --optimize-mft C:
udefrag.exe -o C:
暂停

我可以双击bat文件,它运行正常。但是,bat 文件是从正在运行的程序中调用的。当程序运行到 bat 文件时,会产生以下错误:

'C:\Windows\System32\udefrag.exe' 不是内部或外部命令、可运行程序或批处理文件。

调用是使用 VB6 中的 Shell 完成的。尝试了不同的东西。首先直接调用 bat 文件,然后使用 C:\Windows\System32\cmd.exe /c,然后使用 C:\Windows\SysWOW64\cmd.exe /c。都产生相同的结果。bat 文件运行但不会运行 bat 文件中的 exe 文件。但是如果直接运行,bat文件可以正常工作。请帮忙。谢谢

4

2 回答 2

1

谷歌称 udefrag.exe 是第三方程序。如果它在 c:\windows\system32 中,那么它在路径上,您只需要批处理文件中的最后 3 行。先试试这个,看看它是否需要提升的权限。如果您已关闭 UAC,则将其重新打开以进行测试。您的 VB 程序可能没有正确的权限。

@echo off
udefrag.exe --optimize-mft C:
udefrag.exe -o C:
pause
于 2013-09-16T23:45:31.677 回答
0

我使用任务调度程序来解决这个问题。创建了一个没有名为“碎片整理”的触发器的任务。该任务调用 bat 文件。给出了以下命令,而不是从正在运行的程序中调用 bat 文件:

schtasks /运行 /TN 碎片整理

这将通过任务调度程序运行 bat 文件。我不知道为什么我必须这样做,但效果很好。

于 2013-09-17T15:14:15.410 回答