我需要在 cmd 窗口(在 XP 中)中运行一个命令,该命令将返回有关给定目录中文件的结果。幸运的是,任何给定目录都不会包含超过 9999 个文件,因此如果我将行缓冲区设置为 9999,那么就没问题了。但是,我需要在大约 600 个目录上运行此命令!我将不胜感激有关如何解决问题的任何建议。
我在想也许一个批处理文件可以打开一个 cmd 提示符,将缓冲区设置为 9999 行,运行命令,保持窗口打开,然后在第一个窗口运行时打开一个新窗口并重复该过程。
当然,如果我可以缓冲或以某种方式返回超过 9999 个文件的结果,那就更好了。
提前谢谢你,安德鲁
答案1
>
您可以使用或将屏幕输出存储在文本文件中>>
。要使用它,请照常输入命令,但在末尾添加一个或两个大于号,然后是要输出到的文件的名称,如下所示:dir c:\users /s > c:\list.txt
使用单个>
将始终创建一个新文件,并覆盖任何同名的现有文件。使用两个>>
将创建该文件(如果不存在),但会将其附加到现有文件中。这对于记录批处理文件非常有用,因为您可以>> file.txt
在每一行后面放置,它会将所有屏幕输出输出到同一个文件,以便您按顺序查看。请记住,使用此方法将阻止屏幕上的输出,因为它将输出重定向到文件。您通常可以在创建文件时打开它来查看它(只是确保不要锁定或保存它)。
带有一些日志记录的示例批处理文件:
@echo off
SET DATENOW=%date:~-4,4%-%date:~-10,2%-%date:~-7,2%
SET TIMENOW=%time:~-11,2%.%time:~-8,2%.%time:~-5,2%
SET FILENAME="C:\Logs\Finance Batch %DATENOW% [%TIMENOW%].log"
if not exist "C:\Logs" md C:\Logs
ECHO ---START BATCH FILE--- [%time%]>> %FILENAME%
ECHO Clearing current folder... [%time%] >> %FILENAME%
if exist "C:\Files" rd "C:\Files" /s/q >> %FILENAME%
if not exist "C:\Files" md "C:\Files" >> %FILENAME%
ECHO Copying data from SHAREDOCS... [%time%] >> %FILENAME%
xcopy "\\domain.local\sharedocs\*.*" "C:\Files" /EXCLUDE:exclist.txt /e /c /z /k >> %FILENAME%
ECHO ---BATCH FILE COMPLETE--- [%time%]>> %FILENAME%
ECHO. >> %FILENAME%