Como simplificar o script em lotes do Windows 2 passos em 1 - é possível

0

Eu criei um script que examina uma pasta e, em seguida, cria um novo arquivo de saída com as informações que forem enviadas

Eu tenho uma pasta de saída, dentro desta pasta são pastas (que têm o nome do arquivo do timestamp de quando criado, ou seja, 201303051158), dentro dessas pastas existem vários arquivos contendo informações que eu quero carregar em um banco de dados.

mas quero adicionar mais algumas informações nesses arquivos de dados

rem list files in folders in ts_users and output to a file 3 values, folder, filename
rem without type and full filename

del c:\ts_users\files_list.txt c:\ts_users\filelocations.txt c:\ts_users\folders_list.txt

cd c:\ts_users\output

for /r %%a in (*) do echo %%a >>c:\ts_users\files_list.txt

FOR /F "tokens=4,5 delims=\" %%a in (c:\ts_users\files_list.txt) do @echo %%a %%b %%~nb >>c:\ts_users\filelocations.txt

o arquivo de saída se parece com isso

201303051158 eu1ptsw001.out eu1ptsw001

Esta informação gostaria de adicionar a cada linha nos arquivos de dados.

Uma linha no arquivo de dados é semelhante a esta

USERNAME SESSIONNAME ID STATE IDLE TIME LOGON TIME

mehmet.togrul rdp-tcp#0 2 Active 41 05/03/2013 05:05

thabo.lesame rdp-tcp#23 3 Active 6 05/03/2013 05:55

mas quero que fique assim (exclua a primeira linha)

201303051158 mehmet.togrul rdp-tcp#0 2 Active 41 05/03/2013 05:05 eu1ptsw001

201303051158 thabo.lesame rdp-tcp#23 3 Active 6 05/03/2013 05:55 eu1ptsw001

está usando um arquivo de lote a melhor maneira de fazer isso?

    
por nyehus 19.03.2013 / 14:22

1 resposta

1

Que tal

setlocal enabledelayedexpansion

for /r %%a in (*) do echo %%a >>c:\ts_users\files_list.txt

FOR /F "tokens=4,5 delims=\" %%a in (c:\ts_users\files_list.txt) do (
     set myOutput=%%a %%b %%~nb
     ::or whatever %%X you want
)

Em seguida, na linha que você está usando para fazer eco de todas as informações nos arquivos de log:

echo %whatever_you_are_already_using% %myOutput% >> logfile.extension

Não tenho certeza se enabledelayedexpansion é realmente necessário, mas acho que for loops tem seu próprio escopo no lote, por isso é o equivalente a usar static var= . Emitir set /? para ter certeza, não tenho o Windows aqui e não me lembro com certeza. Você pode precisar usar !myOutput! em vez de %myoutput% .

Quanto ao uso de lote para fazer isso ... Se você estiver familiarizado com o script em lote e chegar até aqui ... claro, fique com ele, caso contrário eu usaria algo um pouco mais dinâmico e menos complicado como o Python, desde manipulação de dados pode ser um pouco mais complicado com o lote. Não tenho certeza se ele suporta regex, mas se for, seria uma boa ideia usá-lo em vez de todos esses parâmetros for doidos.

    
por 19.03.2013 / 14:40

Tags