2011-10-13 11 views
15

He creado un archivo por lotes simple para reorganizar un conjunto de archivos/carpetas. Está funcionando como debería, pero necesito imprimir los resultados en un archivo de registro. Necesito dar salida a los resultados de cada acción (crear un directorio, mover un archivo, renombrar/eliminar un archivo). Cuando uso el comando >>results.txt todo lo que puedo obtener es "1 archivo (s) movido". una tonelada de veces Aquí está el código:Impresión de resultados del archivo por lotes en un archivo de texto

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 

¿Cómo puedo imprimir el archivo de registro (results.txt) cada vez que se realiza una acción?

EDIT: El nuevo código w/ecos:

@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 
+0

Intenta encender ECHO? –

+0

en realidad está encendido, ¿o no? debe hacer eco de las invocaciones de movimiento y renominación. –

Respuesta

14

No hay nada malo con su redirección de la salida estándar a un archivo. Los comandos Move y mkdir no generan nada. Si realmente necesita tener un registro de estos comandos, tendrá que hacer un eco explícito a la salida estándar indicando lo que acaba de ejecutar.

El archivo por lotes, ejemplo:

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

Ejecutar desde la línea de comandos:

myfile.bat >> out.txt 

o

myfile.bat > out.txt 
+1

Bien, intenté agregar líneas línea esto: echo >> resultados.txt% ARCHIVO% .gif movido a% CUENTA% Haciéndolos así hizo que el archivo por lotes creara un directorio llamado para cada archivo .gif y .txt en la carpeta ...:/ –

+0

Tiene que apagar ECHO, y luego repetir el texto de su comentario, no el comando real. Ver mi actualización arriba. –

+0

No estoy seguro de seguir. Intenté eso y en lugar de anexar el eco al archivo results.txt, creó un directorio llamado "Directorio". (El texto que intenté hacer eco fue "Directorio creado.") –

17

Puede añadir esta pieza de código a la parte superior de su lote archivo:

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

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

Básicamente redirige la salida del método :Logit al LOGFILE. El comando exit es para garantizar que el lote finalice después de ejecutar :Logit.

2

Para mostrar consecuencia de archivo por lotes en el archivo de texto, puede utilizar

este comando

chdir > test.txt 

Este comando va a redirigir a consecuencia PRUEBA.TXT.

Al abrir test.txt se le encontró trayectoria actual de directorio en el test.txt

6

Por Resultado de la impresión a archivo

texto podemos seguir

echo "test data" > test.txt 

Esto creará prueba. archivo txt y "datos de prueba" escritos

Si desea agregar, entonces

echo "test data" >> test.txt 
+1

Gracias por explicar la diferencia entre '>' y '>>' – BigHeadCreations

1

Paso 1: Simplemente ponga todo el código requerido en un archivo "MAIN.BAT".

Paso 2: Cree otro archivo de bat, digamos MainCaller.murciélago, y copiar/pegar estas 3 líneas de código:

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

Paso 3: Basta con hacer doble clic "MainCaller.bat".

Toda la salida se registrará en el archivo de texto llamado "log".

0

Ha intentado mover DEL% FILE% .txt% a después de @echo% FILE% eliminado. >> results.txt para que se vea así?

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