Problem z programem pod DOS o rozrzeszeniu .bat


(Arto14) #1

Witam szanownych użytkowników!

Zwracam się do was z pewną prośbą. Otóż potrzebuje programu, który wykona następujące czynności:

1.Utworzy folder o nazwie "Zasoby"

2.Wyszuka na dysku c: wszystkie pliki o rozszerzeniu .txt

  1. Skopiuje go do wcześniej utworzonego folderu zasoby, i zakończy działanie.

Gdy próbowałem wcześniej robić, to program.bat wykonywał 2 pierwsze czynności, ale kompletnie nie udawało mi się skopiować wyszukanych plików. Bardzo proszę aby ktoś podał mi kod z tym programem. Będę bardzo wdzięczny, bo szczerze powiem, że już nie nie mam nerwów do tego,a poza tym mam jeszcze teraz inne obowiązki. Jeszcze raz proszę i z góry dziękuje.

PS: Chciałem zaznaczyć, że mam być on w komendach dosowskich z konsoli cmd, chodzi o programik z rozszerzeniem .bat.

Za wszelkie błędy jakie bym popełnił w opisie przepraszam, ale jest to związane nie znajomością dokładnie tego tematu.


(Tomek Matz) #2
@ECHO OFF

SETLOCAL ENABLEDELAYEDEXPANSION

SETLOCAL ENABLEEXTENSIONS

CLS


SET strLocationPath="D:\Zasoby"

SET strLogFilePath="!strLocationPath!\TextFilesCopierLog.txt"

SET /A intCount=0


IF NOT EXIST !strLocationPath! MKDIR !strLocationPath!

IF EXIST !strLogFilePath! DEL !strLogFilePath!


FOR /F "tokens=*" %%i IN ('DIR "C:\*.txt" /S /B') DO (

	SET /A intCount = !intCount! + 1

	COPY "%%i" !strLocationPath!

	ECHO %%i >> !strLogFilePath!

)

ECHO !intCount! >> !strLogFilePath!

Kod trzeba rozbudować o uwzględnienie sytuacji, gdy dany plik w katalogu Zasoby już istnieje.

W pliku TextFilesCopierLog.txt umieszczony zostaje log z kopiowania.


(Arto14) #3

Dzięki wielkie, ale niestety program mi nie działa. Otwiera się konsola, ale nic się, nie dzieje... jest tylko tworzony katalog "Zasoby":confused: Nie wiem, w czym leży problem...


(Tomek Matz) #4

@dzikamonkey

Poczekaj chwilę. Wyszukanie wszystkich plików txt na całej partycji trochę trwa :slight_smile:


(Arto14) #5

Tak, rzeczywiście działa. Dzięki. Ale czy nie ma jakiegoś prostszego rozwiązanie?

Coś w stylu:

@ECHO ON

MKDIR c:\Zasoby

DIR c:\*txt /s /b 	

copy c:\*.txt* c:\Zasoby /h]

Tyle, że ten programik wyszukuje mi pliki, elegancko je wyświetla na ekranie konsoli, ale nie kopiuje mi ich:/ dlaczego??:frowning: Gdzie leży błąd?


(Tomek Matz) #6
  1. Masz błędy (literówki) w poleceniach. Poza tym copy nie ma przełącznika /h.

  2. Wywołując copy "C:*.txt" "C:\Zasoby" skopiujesz do folderu Zasoby jedynie pliki txt, które znajdują się w katalogu C. W takim podejściu nie uwzględniasz podfolderów.

Jeśli chcesz prostsze rozwiązanie, to możesz użyć polecenia Robocopy http://ss64.com/nt/robocopy.html (choć nie wiem co jest takiego skomplikowanego w tym kodzie co podałem :P). Aby z niego skorzystać musisz mieć Win 7 lub sobie doinstalować ten programik. W linku, który podałem wszystko jest wyjaśnione.

Tutaj masz skróconą wersję kodu, który wrzuciłem wyżej. Wywaliłem z niego tworzenie log-a i czyszczenie ekranu.

@ECHO OFF

SETLOCAL ENABLEDELAYEDEXPANSION

SETLOCAL ENABLEEXTENSIONS


SET strLocationPath="D:\Zasoby"

IF NOT EXIST !strLocationPath! MKDIR !strLocationPath!

FOR /F "tokens=*" %%i IN ('DIR "C:\*.txt" /S /B') DO COPY "%%i" !strLocationPath!

(Arto14) #7

Ok, ok.

Proszę się mi nie dziwić. Dopiero zaczynam przygodę z komendami Dosowskimi:P Wcześniej nigdy nie miałem okazji się tym bawić. Do tej pory pracowałem z poleceniem help. I z tego próbowałem utworzyć ten program, a tam nie ma komend typu:

SETLOCAL ENABLEDELAYEDEXPANSION

SETLOCAL ENABLEEXTEN

SET strLocationPathIF NOT EXIST !strLocationPath! MKDIR !strLocationPath!

FOR /F "tokens=*" %%i INDO COPY "%%i" !strLocationPath!

I tutaj kompletnie jestem zielony. Nie wiem co to są za komendy, co one robią, przełączniki mi nie znany itd.:confused:


(Tomek Matz) #8

Są takie polecenia :slight_smile: Wpisz np. help setlocal albo help for. Z czasem to ogarniesz (nie jest to wcale takie trudne jak się na początku wydaje).


(somekind) #9

matzu , robocopy na pewno nie pójdzie pod systemem DOS.

dzikamonkey , serio uruchamiasz te skrypty pod DOSem? W której wersji?


(Arto14) #10

Uruchamiam je pracujac na windows 7, z konsoli cmd.:slight_smile:


(somekind) #11

Aha, czyli wiersz poleceń systemu Windows, a nie żaden DOS. Tego ostatnio można było spotkać w Windows 98.