我正在尝试创建一个批处理文件,首先我想在其中运行 for 循环来清除事件日志。然后运行一些不同的命令,如 sfc /scannow 或 systeminfo。但是如果我将这些命令放在 for 循环之前。它会在运行 for 循环之前停止。如果我在编写 for 循环之后放置这些命令,它会在运行 for 循环后立即关闭 cmd。有人可以提供正确的脚本来使用单个批处理文件完成所有这些任务吗?
例子:
for /f %x in ('wevtutil el') do wevtutil cl "%x"
答案1
从批处理代码片段来看,唯一真正的“意外后果”是前两个相关 IF 语句之间缺少“与”符号。否则,下面的代码将在我的 Windows 7 和 Windows 2008 服务器上运行(我取消了事件日志的实际清除):
FOR /F "tokens=1,2*" %%V IN ('bcdedit.exe') DO SET adminTest=%%V & IF (%adminTest%)==(Access) goto :noAdmin
for /F "tokens=*" %%G in ('wevtutil.exe el') DO (call :do_clear "%%G")
pause
systeminfo.exe
pause
echo.
goto :exit
:do_clear
@echo =============
echo clearing %1
wevtutil.exe gl %1
@echo =============
goto :eof
:noAdmin
:exit
无需调用批处理程序称呼 : 将退出并且不会返回到第一个批处理程序。我不知道您的脚本还可能以其他什么方式提前退出。
答案2
cls
@ECHO OFF
pause
FOR /F "tokens=1,2*" %%V IN ('bcdedit') DO SET adminTest=%%V
IF (%adminTest%)==(Access) goto noAdmin
for /F "tokens=*" %%G in ('wevtutil.exe el') DO (call :do_clear "%%G")
sfc /scannow
Pause
echo.
echo goto theEnd
:do_clear
echo clearing %1
wevtutil.exe cl %1
goto :eof
:noAdmin
:EXIT