我为我工作的一所学校编写了一个脚本,用于自动将文件夹安装为驱动器X:
,然后进入驱动器X
并递归扫描所有文件夹和子文件夹以查找.bat
、.cmd
和文件并删除它们。该脚本几乎完美运行。我的问题是,如果有任何错误(例如,驱动器路径太长),它不会将其记录到文本文件中。有没有办法用批处理文件来完成这个?.exe
.vbs
@echo off
net use X: \\NETWORK PATH HERE
X:
cls
Echo Deleting bat files please wait...
del /s *.bat > DeletedFiles.txt
Echo Deleting CMD files please wait...
del /s *.cmd >> DeletedFiles.txt
Echo Deleting VBS files please wait...
del /s *.vbs >> DeletedFiles.txt
Echo Deleting Executable files please wait...
del /s *.exe >> DeletedFiles.txt
Echo Process Completed
set /p=Press Any Key To Close
目前,我必须(手动)从 CMD 窗口读取并整理所有错误。将所有错误和已删除的文件保存到文本文件中以备记录,这很方便。
PowerShell 也不行;尽管我是系统管理员,但教育部门不会授予我运行 PowerShell 或 VBS 脚本的权限。
答案1
从:https://stackoverflow.com/questions/1420965/redirect-stdout-and-stderr-to-a-single-file
您可以将标准输出 (stdout) 和标准错误 (stderr) 重定向到同一个日志文件。
例如
dir > a.txt 2>&1
答案2
备选删除并输出日志:
robocopy [empty folder] [path of file] [file to delete or wildcards] /purge
要测试使用/l:
robocopy [empty folder] [path of file] [file to delete or wildcards] /purge /l
真实样品:
C:\TEMP>dir /b
FILE_to_DELETE.txt
C:\TEMP>robocopy C:\EMPTY %cd% FILE_to_DELETE.txt /purge /l
------------------------------------------------------------------------------- ROBOCOPY :: Robust File Copy for Windows
-------------------------------------------------------------------------------
Started: quinta-feira, 10 de dezembro de 2015 13:42:34
Source: C:\EMPTY\
Dest: C:\TEMP\
Files: FILE_to_DELETE.txt
Options: /L /DCOPY:DA /COPY:DAT /PURGE /R:1000000 /W:30
------------------------------------------------------------------------------
0 C:\EMPTY\
*EXTRA File 0 FILE_to_DELETE.txt
------------------------------------------------------------------------------
Total Copied Skipped Mismatch FAILED Extras
Dirs : 1 0 0 0 0 0 Files : 0 0 0 0 0
1 Bytes : 0 0 0 0 0
0 Times : 0:00:00 0:00:00 0:00:00
0:00:00 Ended : quinta-feira, 10 de dezembro de 2015 13:42:34
C:\TEMP>robocopy C:\EMPTY %cd% FILE_to_DELETE.txt /purge
-------------------------------------------------------------------------------
ROBOCOPY :: Robust File Copy for Windows
-------------------------------------------------------------------------------
Started : quinta-feira, 10 de dezembro de 2015 13:42:41 Source
: C:\EMPTY\
Dest : C:\TEMP\
Files : FILE_to_DELETE.txt
Options : /DCOPY:DA /COPY:DAT /PURGE /R:1000000 /W:30
-----------------------------------------------------------------------------
0 C:\EMPTY\
*EXTRA File 0 FILE_to_DELETE.txt
------------------------------------------------------------------------------
Total Copied Skipped Mismatch FAILED Extras
Dirs : 1 0 0 0 0 0 Files : 0 0 0 0 0
1 Bytes : 0 0 0 0 0
0 Times : 0:00:00 0:00:00 0:00:00
0:00:00 Ended : quinta-feira, 10 de dezembro de 2015 13:42:41
C:\TEMP>dir /b
C:\TEMP>
答案3
看起来你没有在代码中写任何东西来告诉计算机写入日志文件。这是整个脚本,还是只是你正在处理的部分?这不是我的核心领域,但我希望看到一个“if”或“ElseIf”语句来告诉计算机该做什么。我正在编造语言,但这是一般的想法。
IF File cannot be deleted (Return Code X)
THEN Output Return Code + Filename to Logfile.txt
答案4
从您的 bat 文件中,您将获得一个文件“DeletedFiles.txt”,其中包含所有已删除文件的列表。如果您想要在执行 bat 文件时生成的所有文本,您可以使用以下命令:$mybatfile.bat>mylogfile.txt 2>&1 复制代码 其中 mybatfile.bat 是要执行的 bat 文件,mylogfile.txt 是在命令提示符中生成的输出文件的名称(会出现所有错误) 是存储执行该bat文件的内容的。
您还可以使用命令 $dir /s /b *.c 以递归方式输出目录和子目录中的所有 *.c 文件,而无需实际删除它们。要记录它,您可以使用 $dir /s /b *.c >listofcfiles.txt