2016-06-20 4 views
2

Ich schreibe gerade einen Performance-Assistenten in Batch, geschrieben, so dass die Menschen jeden Tag lesen und bearbeiten können. Meine Frage ist, ist es möglich, Batch-Code zu optimieren, ohne die Lesbarkeit zu beeinträchtigen? Hier ist ein kleiner Ausschnitt von dem, was ich habe:Batch-Lesbarkeit ohne Kompromisse bei der Ausführung mit Variablen

for /f "tokens=4-5 delims=. " %%i in ('ver') do set VERSION=%%i.%%j 
    if "%version%" == "10.0" SET WinX10=1 
    if "%version%" == "6.3" SET WinX81=1 
    if "%version%" == "6.2" SET WinX80=1 
    if "%version%" == "6.1" SET WinX7=1 
    if "%version%" == "6.0" SET WinXVista=1 
    if "%version%" == "5.2" SET WinXXP64=1 
    if "%version%" == "5.1" SET WinXXP32=1 
    goto OSScanFinder 
    rem Scans your OS for version specific files, required for Extreme, Gaming, and Boot 
    :OSScanFinder 
    if defined WinX10 goto BootCleanWindows10Latest 
    if defined WinX81 goto BootCleanWindows81 
    if defined WinX80 goto BootCleanWindows80 
    if defined WinX7 goto BootCleanWindowsSeven 
    if defined WinXVista goto BootCleanVista 
    if defined WinXXP64 goto BootCleanXP64 
    if defined WinXXP32 goto BootCleanXP32 
    @echo Couldn't find your Operating System. 
    @echo I don't support Win2000, Windows Server 2003/R2/2008/R2/2012/R2 
    @echo Try running as administrator. If that doesn't work, please contact me at the address provided inside of the .bat file. 
    pause 
    exit 

Und

rem Chrome 
if exist "C:\Program Files (x86)\Google\Chrome\Application\Chrome.exe" SET ChromeYes=Defined 
rem uTorrent 
if exist "%userprofile%\Downloads\utorrent.exe" SET uTorrentYes=Defined 

if defined ChromeYes TASKKILL /im Chrome.exe /f 
if defined uTorrentYes TASKKILL /im utorrent.exe /f 

Ich bin nicht für jemanden fragen, meinen Code zu optimieren, nur wenn etwas besser geschrieben werden könnte, oder wenn es eine ist bessere Alternative zur Verwendung von "IF DEFINED" und "SET" bei gleichbleibender Lesbarkeit.

+0

FWIW, Der beste Weg, lesbaren Code zu bekommen, ist eine modernere zu verwenden Sprache (PowerShell, VBS, Bash, C#). Batch und Lesbarkeit gehen wirklich nicht gut zusammen. Wenn alles andere gleich ist, ist Ihr Code ziemlich klar. –

+1

Dieser Beitrag könnte besser für [CodeReview] (http://codereview.stackexchange.com/) geeignet sein, vorausgesetzt das Skript funktioniert ... – aschipfl

+0

Es funktioniert (Es gibt viel mehr als nur die Schnipsel), aber es ist nicht bereit für die vollständige Überprüfung noch. Ich werde es höchstwahrscheinlich dort posten, sobald es fertig ist, aber ich füge immer noch viel zum Skript hinzu, und die Arbeit mit 7 verschiedenen Betriebssystemen braucht etwas Zeit. –

Antwort

1

Die Lesbarkeit ist ein abstraktes Konzept und daher von persönlicher Vorliebe. Zum Beispiel, meiner Meinung nach, in Ihrem Code Sie die gleiche Frage zweimal auf unterschiedliche Weise, so ist es unnötig komplex. Man könnte so etwas tun:

for /f "tokens=4-5 delims=. " %%i in ('ver') do set VERSION=%%i.%%j 
if "%version%" == "10.0" goto BootCleanWindows10Latest 
if "%version%" == "6.3" goto BootCleanWindows81 
if "%version%" == "6.2" goto BootCleanWindows80 
if "%version%" == "6.1" goto BootCleanWindowsSeven 
if "%version%" == "6.0" goto BootCleanVista 
if "%version%" == "5.2" goto BootCleanXP64 
if "%version%" == "5.1" goto BootCleanXP32 

@echo Couldn't find your Operating System. 
@echo I don't support Win2000, Windows Server 2003/R2/2008/R2/2012/R2 
@echo Try running as administrator. If that doesn't work, please contact me at the address provided inside of the .bat file. 
pause 
exit 

jedoch meiner Meinung nach ein kürzerer Code ist immer leichter zu lesen und zu verstehen, so ist es lesbar. Ich würde diesen Code auf diese Weise schreiben:

for /f "tokens=4-5 delims=. " %%i in ('ver') do set VERSION=%%i.%%j 
call Version-%version% 
if errorlevel 1 (
    @echo Couldn't find your Operating System. 
    @echo I don't support Win2000, Windows Server 2003/R2/2008/R2/2012/R2 
    @echo Try running as administrator. If that doesn't work, please contact me at the address provided inside of the .bat file. 
) 
pause 
exit 

... und fügen Sie Dokumentation in jedem der Codesegmente:

:Version-10.0 WinX10 BootCleanWindows10Latest 
rem Apropriate code here 
exit /B 

:Version-6.3 WinX81 BootCleanWindows81 
rem Apropriate code here 
exit /B 

... etc, until 

:Version-5.1 WinXXP32 BootCleanXP32 
rem Apropriate code here 
exit /B 
+0

Interessante Änderungen. Und ja, ich weiß, was ich verlange, hängt vom persönlichen Geschmack ab, und das von Ihnen angefügte Dokumentationsstück ist ziemlich hilfreich, aber mein Ziel ist für jemanden, der nie eine Batch-Datei geöffnet hat, in der Lage ist, sie zu lesen und zu bearbeiten. Ich werde Ihre Antwort als die beste markieren, da Sie alle Informationen zur Verfügung gestellt haben, die ich verlangen kann. Vielen Dank. –

+0

+1, Sie haben meine Gedanken ziemlich gespiegelt. Sie sollten wahrscheinlich erwähnen, dass jede Versionssubroutine "EXIT/B 0" haben muss, sonst wird Ihre CALL-Fehlerüberprüfung irreführende Informationen ausgeben, wenn die Subroutine einen Fehler festgestellt hat. – dbenham

Verwandte Themen