RS232 book cover

Centrum Outlook Express Centrum Outlook Express

OE PowerTool 4.5.5


Twój adres IP to: 44.222.128.90
Przeglądarka: claudebot

Skrypt do nietypowego kopiowania plików

   Kiedyś na grupie dyskusyjnej ktoś chciał skrypt CMD (BAT), który tworzyłby w katalogu podkatalogi o takich nazwach jak dwie ostatnie litery nazw plików znajdujących się w tym katalogu. Następnie trzeba było przekopiować te pliki do odpowiadających im folderów. Skrypt nie miał kopiować plików jeśli pliki w tych katalogach już istniały. Moje rozwiązanie wygląda tak:

@echo off
SetLocal EnableDelayedExpansion
for %%i in (*.*) do (
 set a=%%~ni
 set b=!a:~-2!
 mkdir !b!
 if not exist !b!^\%%i copy %%i !b!
)

Kilka słów komentarza. Najpierw wyłączamy wyświetlanie poleceń wykonywanych przez skrypt. Jeśli komuś jest to potrzebne może wyrzucić lub zakomentować tę linijkę. Następnie włączamy coś, co nazywa się opóźnione rozwijanie zmiennych. cmd.exe ma taką niemiłą cechę, że w środku pętli rozwiązuje zmienną tylko raz przez co widać cały czas tą samą wartość mimo, że się ona zmienia. Potem mamy klasyczną pętlę for. Jedzie ona po plikach z bieżącego katalogu i podstawia poszczególne nazwy pod zmienną i. W środku pętli wprowadzamy pomocniczą zmienną a pod którą podstawiamy nazwę pliku ze zmiennej i ale bez rozszerzenia. Teraz najważniejsze: pod zmienną b podstawiamy dwa ostatnie znaki ze zmiennej a. Użyty został standardowy sposób z dwukropkiem, tyldą i ujemnym indeksem. Wykrzykniki są właśnie do opóźnionego rozwiązywania zmiennych. Gdyby zamiast nich były znaki % pod b podstawiane byłoby cały czas to samo. Dalej tworzymy katalog, też używamy wykrzykników. Na końcu mamy prosty warunek sprawdzający istnienie pliku w utworzonym katalogu. Jako ścieżkę do sprawdzenia podajemy nazwę utworzonego katalogu i nazwę pliku rozdzielone ukośnikiem. Ponieważ jest to znak specjalny, musimy "eskejpnąć" go za pomocą ^. Jeśli pliku nie ma, zostaje on skopiowany.