Today I wanted to write a small batch script for Windows, which has to check if dropbox is still syncing or a specific folder isn't synced yet. If the specific folder is synced, then the batch file will start an other programm which needs consitent files for running.
First I have to download the latest 64bit version of Python 2.x.x . You have to download the version 2 because the script bases on the syntax of version 2.
In Addition I had to download one packages:
I found a code on dropboxwiki that retunrs the status of a file or a folder within the dropbox folder.
I run the Python Compiler GUI and copied the code into the windows, saved it as a *py data and checked if it returns the status of the dropbox folder. Summarized, after two days of tries and errors it works fine
Code by Steve H.
(http://www.dropboxwiki.com/dropbox-addons/python-script-to-get-file-or-folder-status-in-windows)
importwin32pipe, win32ts, win32api, pywintypes, struct, sysdefdropbox_path_status(pathname):return['dropbox not running','not in dropbox','up to date','syncronising','sync problem'][dropbox_path_status_code(pathname)+1]defdropbox_path_status_code(pathname):processid=win32api.GetCurrentProcessId()threadid=win32api.GetCurrentThreadId()request_type=1wtf=0x3048302pipename=r'\\.\PIPE\DropboxPipe_'+\str(win32ts.ProcessIdToSessionId(processid))request=(struct.pack('LLLL', wtf, processid, threadid, request_type)+\pathname.encode('utf-16le')+(chr(0)*540))[0:540]try:response=win32pipe.CallNamedPipe(pipename, request,16382,1000)exceptpywintypes.error, err:iferr[0]==2:return-1else:raiseelse:returnint(response[4:-1])if__name__=="__main__":iflen(sys.argv) >1:'checking status of', sys.argv[1]dropbox_path_status(sys.argv[1])else:sys.stderr,'pathname required'
Note: The code had two smaller mistakes in line 30 and 34. The compiler couldn't unterstand " > ". This stands for the character " > ".
Finally I wrote a batch file which repeatly determines the status of the dropbox folder and wait until synchronization has been completed.
Following I show you my code with some comments.
@echo off ::Zählervariable i wird auf 1 gesetzt SET i=1 :LOOP echo %time% : Start "C:\Program Files (x86)\Python26\python.exe" test.py "C:\Users\NAME\My Dropbox\Dateien\Thunderbird-Profil" > ausgabe.txt ::Sucht nach dem String "up to date" exakter Wortlaut und ohne Beachtung von Groß-/ Kleinschreibung FINDSTR "up to date" ausgabe.txt ::Errorlevel gibt bei Erfolg 0 zurück und wenn nicht dann alles was größer ist als 0 ::IF unterwucht immer ob errorlevel >= ist; nicht ausschließlich = IF errorlevel 1 ( echo %time% : Fehler ::Zaehlervariable i wird um eins erhöht /A bedeutet dass eien Rechenoperation ausgeführt wird SET /A i=i+1 ::GTR bedeutet "größer" IF %i% GTR 11 GOTO END ping -n 10 127.0.0.1>nul GOTO LOOP ) ELSE ( echo %time% :kein Fehler echo %time% : Thunderbird wird gestartet start "Thunderbird" "C:\Program Files (x86)\Mozilla Thunderbird\thunderbird.exe" exit ) :END echo %time% : Timeout after %i% tries. pause
First the Python Interpreter executes the *py data from above and checks if the dropbox folder is synchronized or not. The expression the function gives back is stored in a temporarly data.
After that the programm tries to find the string "up to date". If the string was found (errorlevel < 1), then a third program starts an this scripts end. Otherwiese a counter variable increases until it reaches the value of eleven. Then the prograam waits until the script sends ten pings to localhost as a workaround function to interrupt the programm. If the string wasn't found the assumption is made that the synchronization was succesfull and a second program starts. Finally if after eleven rounds no complete synchronization was found, the programm ends and shows a timeout error.
With kind regards
Keine Kommentare:
Kommentar veröffentlichen