Cmd.exe wykonaj różne czynności zależnie od wciśniętego klawisza


(Abrimaal) #1

Problem dotyczy programu, który nie oferuje zapisu ustawień (profili).

Chcę napisać plik .bat, który skopiuje pliki z różnych folderów do folderu programu w zależności od wciśniętego klawisza. Będą to klawisze 1 - 3.

Przykład jest uproszczony bez dokładnych ścieżek i liter dysków.

Najpierw wyświetla się tekst i czeka na klawisz

@echo klawisz 1 = profil 1, klawisz 2 = profil 2, klawisz 3 = profil 3
pause

Teraz powinny być warunki - jeśli był wciśnięty 1, do folderu programu będą skopiowane wszystkie pliki z folderu 1

copy folder1\*.* folderprogramu\

To samo powinno być powtórzone dla klawiszy 2-3. Nieistotne, co się stanie jeśli był wciśniety 4, czy inny klawisz. Tylko ja będę tego używał, czyli

jeśli klawisz był 2

copy folder2\*.* folderprogramu\

jeśli 3

copy folder3\*.* folderprogramu\

na końcu

folderprogramu\program.exe 

uruchomi program w wybranej konfiguracji.

Czy command line w ogóle obsługuje instrukcje warunkowe? Są jakieś if … ?


(Radek68) #2

Oczywiście, że obsługuje. Teraz piszę z pociągu, z komórki, więc nie podam szczegółów, ale jak będę przy komputerze, to się odezwę.
PS. copy nie kopiuje katalogów, tylko pliki.


(krystian3w) #3

https://support.microsoft.com/pl-pl/help/323007/how-to-copy-a-folder-to-another-folder-and-retain-its-permissions

@ECHO OFF
:BEGIN
TITLE MENU
CLS
ECHO[
ECHO  1. krok
ECHO[
ECHO  2. krok
ECHO[
ECHO  3. krok
ECHO[
ECHO  5. krok
ECHO[
ECHO  7. krok
ECHO[
ECHO  8. krok
ECHO[
ECHO  9. krok
ECHO[
ECHO  "!"  Uruchom skrypt od nowa
ECHO[


SET /P WYBOR= ... Gotowy do działania - wybór należy do Ciebie [+ENTER] - 
IF '%WYBOR%'=='' ECHO "%WYBOR%" Wpisz jeszcze raz
IF '%WYBOR%'=='1' GOTO krok_1
IF '%WYBOR%'=='2' GOTO krok_2
IF '%WYBOR%'=='3' GOTO krok_3
IF '%WYBOR%'=='5' GOTO krok_5
IF '%WYBOR%'=='7' GOTO krok_7
IF '%WYBOR%'=='8' GOTO krok_8
IF '%WYBOR%'=='9' GOTO krok_9
IF '%WYBOR%'=='!' GOTO BEGIN
REM cofnięcie do wyboru jak nie będzie wybrany zadeklarowany znak
GOTO BEGIN

:krok_1
CLS
TITLE 1
echo 1

GOTO exit

:krok_2
CLS
TITLE 2
echo 2

GOTO exit

:krok_3
CLS
TITLE 3
echo 3

GOTO exit

:krok_5
CLS
TITLE 5
echo 5

GOTO exit

:krok_7
CLS
TITLE 7
echo 7

GOTO exit

:krok_8
CLS
TITLE 8
echo 8

GOTO exit

:krok_9
CLS
TITLE 9
echo 9

GOTO exit

:exit
pause > nul

(Abrimaal) #4

Oczywiście, że pliki, dlatego dla każdego wyboru będzie inny folder, a pliki będą miały te same nazwy.


(Abrimaal) #5

Super. Przecież to czysty BASIC :keyboard::tv::smile:
Nie wiedziałem o tym, że w command line ma zaimplementowany Basic. Ciekawe, czy wszystkie instrukcje i funkcje, czy niektóre. Wypróbuję :slight_smile:
Dzięki


(Radek68) #6

Ja swego czasu robiłem coś takiego, tu bez konkretnych poleceń:
Jak chcesz to przetestować, to zapisz go jako .bat i dodaj na końcu
pause
bo inaczej, po prawidłowym wyborze zamknie się okno.
Oczywiście potem tę pauzę usuń.

@echo off
:start
echo.
echo Menu:
echo 1. Polecenie A
echo 2. Polecenie B
echo 3. Polecenie C
echo.
set choice=
set /p choice="Podaj numer polecenia: "
if "%choice%"=="1" goto polecenieA
if "%choice%"=="2" goto polecenieB
if "%choice%"=="3" goto polecenieC
echo Z│y numer polecenia
goto start
:polecenieA
echo Wybrales polecenie A
goto koniec
:polecenieB
echo Wybrales polecenie B
goto koniec
:polecenieC
echo Wybrales polecenie C
goto koniec

:koniec

(Abrimaal) #7

To w sumie to samo, co wyżej. Dzięki. Chodzi jak trzeba :slight_smile:


(krystian3w) #8

U mnie set po prostu nie jest rozbite na dwie linie (PS. coś wycina niewidoczny znak bakspace (widać go w polu textarea / input np. http://www.ltg.ed.ac.uk/~richard/utf-8.cgi?input=&mode=char) z kodu i wtedy pochłania spacje sprzed kropek; pewnie nie można go tak po prostu wyświetlić).