2 dni temu napisałem skrypt do zabijania procesu excela, bo mamy spory projekt w VBA i zdarza się, że Excel umrze pozostawiając proces w menadżerze zadań. Plik ma za zadanie zabijać ten proces, ale musi to być świadoma decyzja i użytkownicy są w wielu krajach więc dlatego tyle if'ów - systemy w firmie to win 7 i 10.
KOD:
for /f "tokens=4-5 delims=. " %%i in ('ver') do set VERSION=%%i.%%j
if "%version%" == "6.1" set win=Win7
if "%version%" == "10.0" set win=Win10
if %win% == Win10 (
systeminfo | findstr /B /C:"System Locale" >C:\temp\locallang.txt
set /p lang=<C:\temp\locallang.txt
if "%lang%" == "System Locale: pl;Polski" (
set q= [93m Czy chcesz zabic wszystkie procesy Excel'a? Napisz [85;34m TAK [93m lub zamknij okno. [0m
set w= [101;93m UWAGA! [101;93m W przypadku otwartych innych arkuszy Excel - mozesz utracic niezapisane dane! [0m
set a= Odpowiedz:
set o=TAK
set positive= ZRIOBIONE!
set negative= ANULOWANE!
)
if not "%lang%" == "System Locale: pl;Polski" (
set q= [93m Do you want to kill all of Excel processes? Type [85;34m YES [93m or close this window. [0m
set w= [101;93m WARRNIG! [101;93m If another workbook of Excel is open - You may lose an unsaved data! [0m
set a= Answer:
set o=YES
set positive= DONE!
set negative= CANCELLED!
)
echo [93m [0m
echo %q%
echo [93m [0m
echo %w%
set /p odp= "%a%"
if "%odp%" == "YES" (taskkill /im excel.exe /f && echo %positive% )
if not "%odp%" == "YES" (echo %negative%)
pause
)
if %win% == Win7 (
echo Czy chcesz zabic wszystkie procesy Excel'a? Napisz YES lub zamknij okno.
echo Do you want to kill all of Excel processes? Type YES or close this window.
echo UWAGA! WARRNING!
echo W przypadku otwartych innych arkuszy Excel - mozesz utracic niezapisane dane!
echo If another workbook of Excel is open - You may lose an unsaved data!
)
if %win% == Win7 (set /p odp= "ODP:")
if %win% == Win7 (
if not "%odp%" EQU "YES" (echo "CANCELLED! Anulowane! %odp%" )
if "%odp%" EQU "YES" (taskkill /im excel.exe /f && echo "DONE! Zrobione! " )
pause
)
Przy włączonym echo wynik skryptu to:
C:\Users\ml46005\Desktop>for /F "tokens=4-5 delims=. " %i in ('ver') do set VERSION=%i.%j
C:\Users\ml46005\Desktop>set VERSION=10.0
C:\Users\ml46005\Desktop>if "10.0" == "6.1" set win=Win7
C:\Users\ml46005\Desktop>if "10.0" == "10.0" set win=Win10
C:\Users\ml46005\Desktop>if Win10 == Win10 (
systeminfo | findstr /B /C:"System Locale" 1>C:\temp\locallang.txt
set /p lang= 0<C:\temp\locallang.txt
if "" == "System Locale: pl;Polski" (
set q= Czy chcesz zabic wszystkie procesy Excel'a? Napisz TAK lub zamknij okno.
set w= UWAGA! W przypadku otwartych innych arkuszy Excel - mozesz utracic niezapisane dane!
set a= Odpowiedz:
set o=TAK
set positive= ZRIOBIONE!
set negative= ANULOWANE!
)
if not "" == "System Locale: pl;Polski" (
set q= Do you want to kill all of Excel processes? Type YES or close this window.
set w= WARRNIG! If another workbook of Excel is open - You may lose an unsaved data!
set a= Answer:
set o=YES
set positive= DONE!
set negative= CANCELLED!
)
echo
echo
echo
echo
set /p odp= ""
if "" == "YES" (taskkill /im excel.exe /f && echo )
if not "" == "YES" (echo )
pause
)
ECHO is on.
ECHO is on.
Widać tam, że lang nie dostaje wartości - przypisanie jednak jest poprawne. To też pewnie nie kwestia uprawnień skoro plik tworzony i zapis do niego jest poprawny. Ma ktoś jakiś pomysł, dlaczego nie zaczytywany jest plik?
W pliku jest jednak linijka:
System Locale: pl;Polski
Wiem, że większość if'ów jest dziwna i się powtarzają, ale inaczej po prostu skrypt nie działał z nieznanych mi powodów.