ďťż

Pliki wsadowe - modyfikacja rejestru Problem przy składni pliku wsadowego.

       

Podstrony


telcocafe

Pozdrawiam. Proszę o pomoc w napisaniu programu wsadowego, który miałby dodawać bądź usuwać klucze do rejestru windows. Otóż gdy pracuję w wierszu poleceń bez problemu mogę dodawać klucze i ustawiać wartości gdy natomiast tworze z tych poleceń plik wsadowy po jego uruchomieniu nic się nie dzieje. Podejrzewam, że to błędy w składni (budowie pliku wsadowego). Proszę o pomoc.



używasz polecenia "reg"? Czy może regedit?

Ja robie np. coś takiego:

reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Runonce" /v %i% /d "c:\%~n1_%i%.cmd" /f >>nul
albo:
regedit /e SubEdit.reg HKEY_CURRENT_USER\Software\SubEdit_Player_Settings

Ale masz stworzony plik wsadowy czy po prostu wpisujesz w wierszu poleceń? Bo ze wpisywaniem komend bezpośrednio w wierszu poleceń nie mam żadnych problemów, natomiast gdy chcę stworzyć plik wsadowy z takiego polecenia (*.bat) po prostu nie działa.

To jest copy-paste z pliku .cmd...

@echo off echo subedit regedit /e SubEdit.reg HKEY_CURRENT_USER\Software\SubEdit_Player_Settings if not %errorlevel%==0 pause
@echo off rem usuwa pliki po restarcie systemu rem Aby uzyc tego skryptu nie uruchamiaj go klikajac! rem Upusc plik ktory chcesz usunac na ikonke tego skryptu! if "%~p1"=="" goto upusc :start if "%~p1"=="" goto zrobione :rerand set i=%random% if exist "c:\%~n1_%i%.cmd" goto rerand reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Runonce" /v %i% /d "c:\%~n1_%i%.cmd" /f >>nul echo @echo off >> "c:\%~n1_%i%.cmd" if exist "%~1\" echo rd /s /q "%~1" >> "c:\%~n1_%i%.cmd" if not exist "%~1\" echo del /f "%~1" >> "c:\%~n1_%i%.cmd" echo if exist "%~1" goto notsuc >> "c:\%~n1_%i%.cmd" echo attrib -h "c:\%~n1_%i%.cmd" >> "c:\%~n1_%i%.cmd" echo del /f /q "c:\%~n1_%i%.cmd" >> "c:\%~n1_%i%.cmd" echo goto end >> "c:\%~n1_%i%.cmd" echo :notsuc >> "c:\%~n1_%i%.cmd" echo echo. >> "c:\%~n1_%i%.cmd" echo echo Brak powodzenia, usunac po ponownym restarcie? >> "c:\%~n1_%i%.cmd" echo echo. >> "c:\%~n1_%i%.cmd" echo pause >> "c:\%~n1_%i%.cmd" echo reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Runonce" /v %i% /d "c:\%~n1_%i%.cmd" /f >> "c:\%~n1_%i%.cmd" echo :end >> "c:\%~n1_%i%.cmd" attrib +h "c:\%~n1_%i%.cmd" set i= echo. echo Plik "%~nx1" zostanie usuniety przy nastepnym restarcie. shift goto start :zrobione echo. echo Zrobione... goto end :upusc echo Aby uzyc tego skryptu nie uruchamiaj go klikajac! echo Upusc plik ktory chcesz usunac na ikonke tego skryptu! goto end :end

przetestuj sam czy działa




To jest copy-paste z pliku .cmd...

@echo off echo subedit regedit /e SubEdit.reg HKEY_CURRENT_USER\Software\SubEdit_Player_Settings if not %errorlevel%==0 pause
@echo off rem usuwa pliki po restarcie systemu rem Aby uzyc tego skryptu nie uruchamiaj go klikajac! rem Upusc plik ktory chcesz usunac na ikonke tego skryptu! if "%~p1"=="" goto upusc :start if "%~p1"=="" goto zrobione :rerand set i=%random% if exist "c:\%~n1_%i%.cmd" goto rerand reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Runonce" /v %i% /d "c:\%~n1_%i%.cmd" /f >>nul echo @echo off >> "c:\%~n1_%i%.cmd" if exist "%~1\" echo rd /s /q "%~1" >> "c:\%~n1_%i%.cmd" if not exist "%~1\" echo del /f "%~1" >> "c:\%~n1_%i%.cmd" echo if exist "%~1" goto notsuc >> "c:\%~n1_%i%.cmd" echo attrib -h "c:\%~n1_%i%.cmd" >> "c:\%~n1_%i%.cmd" echo del /f /q "c:\%~n1_%i%.cmd" >> "c:\%~n1_%i%.cmd" echo goto end >> "c:\%~n1_%i%.cmd" echo :notsuc >> "c:\%~n1_%i%.cmd" echo echo. >> "c:\%~n1_%i%.cmd" echo echo Brak powodzenia, usunac po ponownym restarcie? >> "c:\%~n1_%i%.cmd" echo echo. >> "c:\%~n1_%i%.cmd" echo pause >> "c:\%~n1_%i%.cmd" echo reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Runonce" /v %i% /d "c:\%~n1_%i%.cmd" /f >> "c:\%~n1_%i%.cmd" echo :end >> "c:\%~n1_%i%.cmd" attrib +h "c:\%~n1_%i%.cmd" set i= echo. echo Plik "%~nx1" zostanie usuniety przy nastepnym restarcie. shift goto start :zrobione echo. echo Zrobione... goto end :upusc echo Aby uzyc tego skryptu nie uruchamiaj go klikajac! echo Upusc plik ktory chcesz usunac na ikonke tego skryptu! goto end :end

przetestuj sam czy działa


No właśnie dzieje się to samo co z moimi 'wsadami'. Wiersz polecenia pokazuje się na ułamek sekundy i znika nie dodając (bądź usuwając) wartości do rejestru. Najciekawsze jest to że dziś udało mi się stworzyć plik wsadowy który działał tak jak powinien. A teraz próbuje go uruchomić i nic. Nie mam zielonego pojęcia co jest grane. Może znajdzie się jakaś mądra głowa :).

Wiesz co spróbuj: włącz ręcznie wiersz polecenia, i z niego uruchom skrypt. No i oczywiście zakomentuj najpierw wszystkie "@echo off"

Chodzi mi o to żeby coś zostało na ekranie...

Albo przekieruj wyjścia (standard i błąd) do pliku...

Tylko powiem Ci szczerze że średnio pamiętam te wszystkie komendy. Chodzi Ci o wpisanie komendy w wierszu (czyli reg add itp) czy też o wydanie komendy która by uruchomiła (wykonała) gotowy plik wsadowy? Dam konkretny przykład - będzie łatwiej. Chcę do klucza HKCU\Software\Microsoft\Windows\CurrentVersion\Policies dodać podklucz o nazwie Explorer (dam sobie spokój z wartościami) wiec wydaję komendę: reg add HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer. I po wpisaniu tego bezpośrednio do wiersza klucz zostaje dodany do rejestru (ale wsadowy z tym poleceniem nie działa). Może zaproponuj jak w tym wypadku miałby wyglądać plik wsadowy? Zapewne robie jakiś błąd.
Użytkownik montanamax edytował ten post 03 styczeń 2007, 02:01
1.
uruchom z wiersz poleceń plik wsadowy:

mycostamuser>mojplik.cmd i enter

mycostamuser> to znak zachęty wpisz tylko: "mojplik.cmd" i naciśnij enter. Chodzi o to żeby skrypt wykonał sie i okno NIE ZNIKŁO tylko było widać jaki błąd wystąpił (i napisz jaki to błąd)

2.
to:

"reg add HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer"

zaznacz to między znakami cudzysłowu i wklej w notatniku, zapisz jako .cmd (czy .bat) i MA DZIAŁAĆ :)

nie ważne czy z pliku wsadowego, czy z linii komend - u mnie działa.

Tzn. mam ten wpis w rejestrze, więc dodałem na końcu '2' czyli .....\explorer2 i po ponownym włączeniu regedita mam taki klucz (folder).

3.
wszystkie komendy dostępne w winxp są w pliku pomocy nazwanym "ntcmds.chm" poszukaj w katalogu windows (ciężko sie do tego dogrzebać przez standardowy interfejs pomocy)

//edit:
nie zapisujesz przypadkiem pliku wsadowego w jakimś "innym" kodowaniu? unikod czy iso?

//masz jeszcze cały plik:

dodaj.cmd
Użytkownik Radek edytował ten post 03 styczeń 2007, 06:05
No nie wiem ale w dalszym ciągu nie da rady. Jak wpisuję bezpośrednio w wierszu poleceń klucz zostaje dodany (wyświetla się napis 'Operacja zakończona pomyślnie'). Jak z pliku *.cmd - to co do tej pory czyli mignie na moment okno wiersza i znika nie dodając wartości. Co do kodowania to rzeczywiście miałem Unicode ale zmiana na inne (wypróbowałem wszystkie) nic nie dała. Natomiast polecenie 'mycostamuser>mojplik.cmd i enter' (oczywiście w miejscu 'mojplik' podaję nazwę swojego) powoduje wyświetlenie komunikatu że nie jest to poprawne polecenie, plik wykonywalny lub wsadowy. Miałbym prośbę do Ciebie. Jeśli możesz napisz mi treść (gotowy cały kod a nie tylko komendę) pliku wsadowego z kluczem o którym wcześniej wspominałem (dodający podklucz Explorer do klucza HKCU\Software\Microsoft\Windows\CurrentVersion\Policies).
Użytkownik montanamax edytował ten post 03 styczeń 2007, 03:42
Spróbuj czegoś takiego:

@echo off rem nie pokazuje tego, co plik bat robi... echo REGEDIT4 >>dodaj.reg rem zapisuje REGEDIT4 do pliku dodaj.reg echo. >>a.reg rem zapisuje echo do pliku dodaj.reg echo "reg add HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer" >>dodaj.reg rem zapisuje klucz jaki chcesz dodać do pliku dodaj.reg echo. >>dodaj.reg rem zapisuje jeszcze raz echo do pliku dodaj.reg regedit /s dodaj.reg rem uodpala plik dodaj.reg z parametrem /s del dodaj.reg >nul rem usuwa plik dodaj.reg
Tam gdzie masz

echo "reg add HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer" >>dodaj.reg
jakby nie działało, spróbuj bez " "

A żeby się upewnić, czy działa możesz powyższą linijkę zastąpić taką:

echo [-HKEY_CURRENT_USER\Jakiś\Klucz\Do\Usunięcia] >>dodaj.reg
Użytkownik mtek edytował ten post 03 styczeń 2007, 06:58

zaznacz to między znakami cudzysłowu i wklej w notatniku, zapisz jako .cmd (czy .bat) i MA DZIAŁAĆ

Uwierz że taką właśnie komendę wpisywałem w wierszu i działała, a we wsadowym nie. :)

Tym razem udało się uruchomić Wasze pliki i działają bez problemów. Obawiam się że przyczyna tkwi w moim systemie (choć jest 'świeży'). Będę próbował ze swoimi plikami i zobaczę co będzie się działo.
Dzięki wielkie za pomoc.

Radek Tobie przede wszystkim.
Użytkownik montanamax edytował ten post 03 styczeń 2007, 13:05
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • nvm.keep.pl

  • Sitedesign by AltusUmbrae.