Batch For loop doesn't refresh the file it's pulling from

前端 未结 4 925
暖寄归人
暖寄归人 2021-01-25 05:21

So I have a for loop that does an iteration of a SQL stored procedure for every line in a file queue.txt, now that all works great, what DOESNT however is that if i

4条回答
  •  时光说笑
    2021-01-25 05:44

    Okay so the soultion to my problem that I worked out was to add an extra batch file called co-ordinator.bat it checked if busy.txt was present, if it was then it would add the connecting devices into a file late.txt at the end of each iteration of the loop the process would check for the presence of late.txt, if it was present then it would merge it with queue.txt and then use a goto out of the loop to the top to re-initialise the for loop.

    Code as such:

    @echo off
    cd "%UserProfile%\Desktop\Scripting\"
    echo words > busy.txt
    :rerun
    
    FOR /f "delims=" %%a in ('type queue.txt') DO (
    IF NOT EXIST reset.sql (
    
    ::Create SQL command
    echo USE dbname> reset.sql
    echo EXEC dbo.sp_ResetSubscription @ClientName = '%%a'>> reset.sql
    echo EXEC dbo.sp_RunClientSnapshot @ClientName = '%%a'>> reset.sql
    echo #################### %date% - %time% ####################################################>> log.txt
    echo Reinitialising '%%a'>> log.txt
    sqlcmd -i "reset.sql">> log.txt
    echo. >> log.txt
    echo ####################################################################################################>> log.txt
    echo. >> log.txt
    
    type queue.txt | findstr /v %%a> new.txt
    type new.txt> queue.txt
    echo New list of laptops waiting:>> log.txt
    type queue.txt>> log.txt
    echo. >> log.txt
    echo ####################################################################################################>> log.txt
    echo. >> log.txt
    
    if exist reset.sql del /f /q reset.sql
    if exist late.txt (
    type late.txt>> queue.txt
    del /f /q late.txt
    goto rerun
    )
    ) 
    )
    
    if exist late.txt del /f /q late.txt
    if exist busy.txt del /f /q busy.txt
    if exist queue.txt del /f /q queue.txt
    if exist new.txt del /f /q new.txt
    

提交回复
热议问题