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

Command line 将批处理文件结果打印到文本文件,command-line,batch-file,redirect,Command Line,Batch File,Redirect,我创建了一个简单的批处理文件来重新组织一组文件/文件夹。它正常工作,但我需要将结果打印到日志文件中。我需要输出每个操作的结果(创建目录、移动文件、重命名/删除文件)。当我使用command>>results.txt时,我能从中得到的只是“移动了1个文件”。很多次。代码如下: FOR %%a IN (C:\scans\*.txt) DO CALL :read %%~na TREE /f >> tree.txt @GOTO :EOF :read @set FILE=%1 FOR /f

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

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 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

将标准输出重定向到文件没有问题。Move和mkdir命令不输出任何内容。如果您确实需要这些命令的日志跟踪,那么您需要显式地回显到标准输出,指示您刚刚执行的命令

批处理文件,例如:

@ECHO OFF
cd bob
ECHO I just did this: cd bob
从命令行运行:

myfile.bat >> out.txt


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

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

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

它基本上将
:Logit
方法的输出重定向到
LOGFILE
exit
命令用于确保批处理在执行
:Logit

后退出。要在文本文件中显示批处理文件的结果,可以使用

此命令

chdir > test.txt
此命令将结果重定向到test.txt


打开test.txt时,您将在test.txt中找到将结果打印到文本文件的目录的当前路径

我们可以跟随

echo "test data" > test.txt
这将创建test.txt文件并写入“测试数据”

如果你想追加

echo "test data" >> test.txt

步骤1:只需将所有必需的代码放在一个“MAIN.BAT”文件中

步骤2:创建另一个bat文件,比如MainCaller.bat,然后复制/粘贴这3行代码:

REM THE MAIN FILE WILL BE CALLED FROM HERE..........
CD "File_Path_Where_Main.bat_is_located"
MAIN.BAT > log.txt
步骤3:只需双击“MainCaller.bat”


所有输出都将记录到名为“log”的文本文件中。

您是否尝试在@echo%file%删除后将DEL%file%.txt%移动到中。>>结果是这样的

@echo %FILE% deleted. >> results.txt
DEL %FILE%.txt

你试着打开ECHO?它实际上是开着的,不是吗?它应该会回显move和ren命令调用。好的,所以我只是尝试在下面添加行:echo>>results.txt%FILE%.gif移动到%ACCOUNT%,这样做会使批处理文件为文件夹中的每个.gif和.txt创建一个名为的目录…:/您必须关闭ECHO,然后回显注释文本,而不是实际的命令。请参阅上面我的更新。我不确定是否遵循。我试过了,它没有将echo附加到results.txt文件中,而是创建了一个名为“directory”的目录。(我试图回显的文本是“目录已创建”。)我不知道“将回显附加到results.txt文件”是什么意思。为什么不使用ECHOsEvery将新版本的bat文件添加到帖子中?每当发生移动、重命名、删除或mkdir时,我需要将该操作附加到results.txt文件中。例如,当我在做mkdir时……创建了ECHO目录%ACCOUNT%。>>这导致批处理文件为我迭代的每个文本文件创建一个目录。您还说过“从命令行运行[重定向/输出到文件]”,但我试图做的是每次在批处理文件中执行该操作时输出到文件。因此,我应该只运行一次单个批处理文件,文件中的一切都会发生。感谢您解释
>
之间的区别
@echo %FILE% deleted. >> results.txt
DEL %FILE%.txt