2011-10-13 25 views
15

Ho creato un semplice file batch per riorganizzare un insieme di file/cartelle. Funziona come dovrebbe, ma ho bisogno di stampare i risultati in un file di registro. Ho bisogno di produrre i risultati di ogni azione (creare una directory, spostare un file, rinominare/eliminare un file). Quando utilizzo il comando >>results.txt tutto ciò che riesco a ottenere è "1 file spostati". un sacco di volte. Ecco il codice:Stampa di risultati di file batch in un file di testo

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 

Come posso stampare sul file di registro (results.txt) ogni volta che viene eseguita un'azione?

EDIT: nuovo codice w/echi:

@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

Si prova a attivare ECHO? –

+0

in realtà è acceso, vero? dovrebbe echeggiare le invocazioni del comando move e ren. –

risposta

14

Non c'è niente di sbagliato con il reindirizzamento dello standard in un file. I comandi Move e mkdir non producono nulla. Se hai davvero bisogno di avere una traccia di log di quei comandi, allora avrai bisogno di echo esplicitamente allo standard che indica ciò che hai appena eseguito.

Il file batch, ad esempio:

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

Eseguire da linea di comando:

myfile.bat >> out.txt 

o

myfile.bat > out.txt 
+1

Ok, ho appena provato ad aggiungere righe: echo >> results.txt% FILE% .gif spostato a% ACCOUNT% Facendolo in questo modo il file batch ha creato una directory denominata per ogni .gif e .txt nella cartella ...:/ –

+0

È necessario disattivare ECHO, quindi echo il testo del commento, non il comando effettivo. Vedi il mio aggiornamento sopra. –

+0

Non sono sicuro di seguirlo. L'ho provato e invece di aggiungere l'eco al file results.txt, ha creato una directory chiamata "Directory". (Il testo che ho cercato di echo era "Directory creata.") –

17

È possibile aggiungere questo pezzo di codice per la parte superiore del lotto file:

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

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

In pratica reindirizza l'output del metodo :Logit allo LOGFILE. Il comando exit serve a garantire che il batch esca dopo l'esecuzione di :Logit.

2

Per mostrando risultato di file batch in file di testo, è possibile utilizzare

questo comando

chdir > test.txt 

Questo comando reindirizza risultato TEST.TXT.

Quando si apre test.txt si trovano attuale percorso della directory in test.txt

6

Per Stampa Risultato al file di

testo possiamo seguire

echo "test data" > test.txt 

Questo creerà test. file txt e "dati test" scritti

Se si desidera aggiungere successivamente

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

Grazie per aver spiegato la differenza tra '>' e '>>' – BigHeadCreations

1

Passaggio 1: Inserisci semplicemente tutto il codice richiesto in un file "MAIN.BAT".

Passaggio 2: creare un altro file bat, ad esempio MainCaller.pipistrello, e basta copiare/incollare queste 3 righe di codice:

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

Fase 3: Basta fare doppio clic su "MainCaller.bat".

Tutti gli output verranno registrati nel file di testo denominato "log".

0

Hai provato a spostare DEL% FILE% .txt% su dopo @echo% FILE% eliminato. >> results.txt in modo che assomigli a questo?

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