将批处理文件结果打印到文本文件

19

我创建了一个简单的批处理文件来重新组织一组文件/文件夹。它正常运行,但我需要将结果打印到日志文件中。我需要输出每个操作的结果(创建目录、移动文件、重命名/删除文件)。当我使用command> results.txt时,我只能得到"1 file(s) moved." 大量重复。以下是代码:

FOR %%a IN (C:\scans\*.txt) DO CALL :read %%~na
TREE /f >> tree.txt
@GOTO :EOF

:read
@set FILE=%1
FOR /f "tokens=1,2" %%b IN (%FILE%.txt) DO CALL :makeDir %%b %%c
@GOTO :EOF

:makeDir
@set ACCOUNT=%1
@set CHECK=%2
mkdir %ACCOUNT%
CALL :move
@GOTO :EOF

:move
MOVE %FILE%.gif %ACCOUNT%
REN %ACCOUNT%\%FILE%.gif %CHECK%.gif
DEL %FILE%.txt
@GOTO :EOF

当执行某个操作时,我该如何将其打印到日志文件(results.txt)中?

编辑:带有echo的新代码:

@echo off
FOR %%a IN (C:\scans\*.txt) DO CALL :read %%~na
TREE /f >> tree.txt
@GOTO :EOF

:read
@set FILE=%1
FOR /f "tokens=1,2" %%b IN (%FILE%.txt) DO CALL :makeDir %%b %%c
@GOTO :EOF

:makeDir
@set ACCOUNT=%1
@set CHECK=%2
mkdir %ACCOUNT%
@echo Made directory for %ACCOUNT% >> results.txt
CALL :move
@GOTO :EOF

:move
MOVE %FILE%.gif %ACCOUNT%
@echo %FILE% moved to %ACCOUNT%
REN %ACCOUNT%\%FILE%.gif %CHECK%.gif
@echo %ACCOUNT%\%FILE% renamed %CHECK% >> results.txt
DEL %FILE%.txt
@echo %FILE% deleted. >> results.txt
@GOTO :EOF

你试着打开ECHO了吗? - Stealth Rabbi
它实际上是开启的,不是吗?它应该回显移动和重命名命令的调用。 - PA.
6个回答

21
你可以将以下代码添加到批处理文件的顶部:

您可以将此代码片段添加到批处理文件的顶部:

@Echo off
SET LOGFILE=MyLogFile.log
call :Logit >> %LOGFILE% 
exit /b 0

:Logit
:: The rest of your code
:: ....

该方法基本上将:Logit方法的输出重定向到LOGFILEexit命令是为了确保批处理程序在执行:Logit后退出。


当我尝试这样做时,脚本永远无法通过exit /b 0行。 - Alex Oakley

16

将标准输出重定向到文件没有任何问题。Move和mkdir命令不会输出任何内容。如果您确实需要这些命令的日志记录,那么您需要显式地在标准输出上打印指示您刚刚执行了什么的echo。

批处理文件示例:

@ECHO OFF
cd bob
ECHO I just did this: cd bob

从命令行运行:

myfile.bat >> out.txt
或者
myfile.bat > out.txt

1
好的,我刚刚尝试添加了这样的行:echo >> results.txt %FILE%.gif 移动到 %ACCOUNT%像这样做会使批处理文件创建一个以文件夹中每个.gif和.txt命名的目录... :/ - Chris V.
你必须关闭ECHO,然后回显你的注释文本,而不是实际命令。请参见我上面的更新。 - Stealth Rabbi
我不确定我理解了。我尝试过了,但是它没有将echo附加到results.txt文件中,而是创建了一个名为“Directory”的目录。(我尝试echo的文本是“已创建目录”。) - Chris V.
我不知道"将回显附加到results.txt文件"是什么意思。为什么不使用新版本的批处理文件并添加ECHOs来更新您的帖子呢? - Stealth Rabbi
1
每次移动、重命名、删除或创建目录时,我都需要将该操作追加到results.txt文件中。例如,当我执行mkdir命令时,我需要在批处理文件中添加ECHO目录%ACCOUNT%已创建。但这样会导致批处理文件为我遍历的每个文本文件都创建一个目录。你还说“从命令行运行[重定向/输出到文件]”,但我想要做的是每次批处理文件执行该操作时输出到文件。因此,我只需要运行一次单个批处理文件,所有操作都在文件中完成。 - Chris V.
请重新阅读我的回复。不要在脚本内部进行标准输出重定向,而是从您的命令终端执行:myfile.bat > out.txt。 - Stealth Rabbi

6
将打印结果保存到文本文件中,我们可以按照以下步骤进行操作:
echo "test data" > test.txt

这将创建test.txt文件并写入"测试数据"。
如果你想要追加,则:
echo "test data" >> test.txt

2
感谢您解释>>>之间的区别。 - BigHeadCreations

3

若要在文本文件中显示批处理文件的结果,可以使用以下命令:

chdir > test.txt

这个命令将结果重定向到test.txt文件。

当你打开test.txt文件时,你会在其中找到当前目录的路径。


3

步骤1:将所有必需的代码放入“MAIN.BAT”文件中。

步骤2:创建另一个批处理文件,比如MainCaller.bat,并复制/粘贴以下3行代码:

REM THE MAIN FILE WILL BE CALLED FROM HERE..........
CD "File_Path_Where_Main.bat_is_located"
MAIN.BAT > log.txt

步骤三:双击“MainCaller.bat”。
所有输出将被记录在名为“log”的文本文件中。

0
你试过将 DEL %FILE%.txt% 移到 @echo %FILE% deleted. >> results.txt 之后吗?这样看起来是这样的吗?
@echo %FILE% deleted. >> results.txt
DEL %FILE%.txt

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接