Skip to content

Łatwo zastąp zablokowany plik, gdy zostanie odblokowany

26 de lipiec de 2021
1627314388 image thumb

Jeśli spróbujesz zaktualizować niektóre pliki systemu Windows (takie jak programy lub dokumenty tekstowe), gdy są one używane, pojawi się standardowy błąd „odmowa dostępu, plik jest w użyciu”. Chociaż uzasadnienie tego jest oczywiste, może być dość denerwujące, jeśli musisz zaktualizować mały plik wykonywalny, który jest obecnie używany przez innego użytkownika. W takich sytuacjach masz między innymi następujące wybory, z których wszystkie zabierają Twój cenny czas:

  • Znajdź i skontaktuj się z użytkownikami, którzy aktualnie korzystają z pliku, powiedz im, aby zamknęli/zapisali swoją pracę itp., a następnie zastosuj aktualizację.
  • Nie stosuj aktualizacji od razu i pamiętaj, aby zrobić to później, gdy użytkownicy nie są w systemie.
  • Zaplanuj jakieś narzędzie, aby je zastąpić przy następnym ponownym uruchomieniu.

Cóż, mamy dla Ciebie inne rozwiązanie: skrypt, który wywołujesz za pomocą menu Wyślij do, który wykonuje następujące czynności:

  1. Próbuje usunąć stary plik.
  2. Jeśli stary plik jest zablokowany, skrypt czeka 20 sekund. Przejdź do kroku 1.
  3. Jeśli stary plik nie jest zablokowany, stary plik jest zastępowany nowym plikiem. Przejdź do kroku 4.
  4. Opcjonalnie wyloguj się po zakończeniu procesu.

W ten sposób otrzymasz po prostu komendę replace w ruchu, a skrypt zajmie się resztą. Pomoże to uniknąć śledzenia użytkowników lub konieczności instalowania w systemie niepotrzebnych narzędzi.

Konfiguracja i użytkowanie

Skrypt można umieścić w dowolnym miejscu w systemie. Następnie wystarczy utworzyć skrót do niego w folderze SendTo:

Aby rozpocząć proces zastępowania, wybierz stary plik i nowy plik, a następnie wywołaj opcję Wyślij do, klikając prawym przyciskiem myszy stary plik/plik do zastąpienia.

1627314387 435 Latwo zastap zablokowany plik gdy zostanie odblokowany


Skrypt wyświetli dokładnie, co się stanie, i przedstawi opcję wylogowania się po zakończeniu wymiany.

1627314387 450 Latwo zastap zablokowany plik gdy zostanie odblokowany

Skrypt będzie stale próbował usunąć stary plik, czekając kilka sekund pomiędzy próbami.

1627314387 417 Latwo zastap zablokowany plik gdy zostanie odblokowany

Wszystko, co musisz zrobić, to uruchomić proces, a gdy wszyscy użytkownicy będą nieobecni, plik zostanie zastąpiony.

Zabezpieczenia

Skrypt ma kilka wbudowanych zabezpieczeń:

  • Stary i nowy plik są wyraźnie przedstawione, dzięki czemu wiesz dokładnie, co się stanie.
  • Możesz zamknąć okno poleceń w dowolnym momencie, aby zatrzymać akcję (oczywiście zakładając, że zamiana nie została już wykonana).
  • Skrypt zapewni, że wybrałeś tylko dwa pliki po wywołaniu polecenia Wyślij do. Jeśli wybierzesz na przykład 1 lub 3 pliki, otrzymasz powiadomienie i nic się nie stanie.

Scenariusz

@ECHO OFF
TITLE Replace Locked File
ECHO Replace Locked File
ECHO Written by: Jason Faulkner
ECHO SysadminGeek.com
ECHO.
ECHO.

SETLOCAL EnableExtensions

REM Validation.
SET Error=1
IF {%2}=={} (
ECHO Two files must be selected to run the replace.
GOTO End
)
IF NOT {%3}=={} (
ECHO More than 2 files were selected so I am not sure what to do.
GOTO End
)

SET Error=0
SET OldFile=”%~f1″
SET NewFile=”%~f2″
SET LogOffWhenDone=0

REM Show what will happen so you have a chance to cancel out.
ECHO Old File: %OldFile%
ECHO ———
ECHO New File: %NewFile%
ECHO.
ECHO You can cancel replacing the Old File with the New File by closing now.
ECHO.

REM Log off prompt. If you do not want to see this, you can delete these lines.
ECHO Automatically log off once the replace process has completed?
ECHO Enter 'Y’ to automatically log off or enter anything else to not.
SET /P LogOffWhenDone=

:DoReplace
DEL /F /Q %OldFile%
IF NOT EXIST %OldFile% (
MOVE %NewFile% %OldFile%
ECHO File replaced successfully.
GOTO End
)
ECHO.
ECHO The Old File is still locked. Waiting a few moments to try again.
TIMEOUT /T 20
GOTO DoReplace

:End
IF {%Error%}=={1} (
ECHO Instructions for use:
ECHO 1. Select the two files in Windows Explorer.
ECHO 2. Right click on the Old File and go Send To – Replace Locked File
ECHO.
ECHO The file you right clicked on will be replaced with the other selected file.
ECHO.
ECHO Stopping without doing anything. Press any key to close.
TIMEOUT /T 15
)
IF /I {%LogOffWhenDone%}=={Y} (
ECHO.
ECHO Option to Log Off when completed was selected.
ECHO You will be logged off shortly.
SHUTDOWN /L
)
ENDLOCAL

Spinki do mankietów

Pobierz skrypt ReplaceFile z SysadminGeek.com

Czy ten post był pomocny?