• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

question-closed Porównywanie plików w cmd.exe za pomocą .bat

0 głosów
1,773 wizyt
pytanie zadane 21 października 2016 w Systemy operacyjne, programy przez Matty Nowicjusz (150 p.)
zamknięte 21 października 2016 przez Matty

Witam, zwracam się z prośbą o pomoc w rozwiązaniu zadania bo sam już siedzę nad tym 3 godziny i nie mam pomysłu.

Udało mi się zrobić coś takiego:

 

 

@echo off
echo Witaj w porownywarce plikow. W atrybutach uruchamiania wpisz kolejno katalogi ktore chcesz porownac.
dir /s %1 > porow1.txt
dir /s %2 > porow2.txt

if porow1.txt == porow2.txt goto etykieta1
if not porow1.txt == porow2.txt goto etykieta2

:etykieta1
echo Zawartosc jest identyczna
goto koniec

:etykieta2
echo Zawartosc jest rozna
goto koniec

:koniec
echo --------------------------------
echo Koniec programu
pause

 

 

 

Jednak wynik jest zawsze "Zawartosc jest rozna" ponieważ jeden plik ma w nazwie jeden a drugi dwa po za tym to chyba nie porównuje wartości (folderow w srodku). Probowalem za pomoca komendy comp jednak ta mi nie działa, wyskakuje ze nie moze otworzyc danego katalogu. Prosze bardzo o pomoc i podpowiedzi. Uprzedzam że nie jestem zaawansowany w tym temacie ale postanowilem sie tym zainteresowac. W razie pytań odpowiem na każde. Pozdrawiam i z niecieprliwoscia czekam na odpowiedzi.

 

 

EDIT1: Udało mi się skrypt zaktualizaować do takiego momentu ze juz prawie wszystko dziala:

@echo off
echo Witaj w porownywarce plikow. Pamietj aby w atrybutach uruchamiania wpisac kolejno katalogi ktore chcesz porownac.
pause
dir /s %1 > porow1.txt 
dir /s %2 > porow2.txt

find /v /i porow1.txt "Directory" > porow3.txt
find /v /i porow2.txt "Directory" > porow4.txt

if porow3.txt == porow4.txt goto etykieta1
if not porow3.txt == porow4.txt goto etykieta2

:etykieta1
echo --------------------------------
echo Zawartosc jest identyczna.
goto koniec

:etykieta2
echo --------------------------------
echo Zawartosc jest rozna.
goto koniec

:koniec
echo --------------------------------

echo Koniec programu
pause

 

Tylko linie z if'em nie działają prawidodłowo ponieważ porownuje mi stringi tzn porow3.txt z porow4.txt a nie pliki .txt dlatego zawsze jest rozny bo 3/=4. Jak nie ifem to czym to zrobic?

komentarz zamknięcia: rozwiazanie

1 odpowiedź

+1 głos
odpowiedź 21 października 2016 przez niezalogowany
wybrane 21 października 2016 przez Matty
 
Najlepsza
Do tego służy specjalny tool: "fc"
komentarz 21 października 2016 przez Matty Nowicjusz (150 p.)
fc folder1 folder2

wyskakuje mi:

FC: cannot open FOLDER1 - No such file or directory.

 

gdy wpisuje komende jestem w folderze gdzie jest folder1 i folder2. Nie wiem dlaczego...
komentarz 21 października 2016 przez niezalogowany
Bo to służy do porównywania plików, a nie folderów (jak sama nazwa toola mówi)
komentarz 21 października 2016 przez Matty Nowicjusz (150 p.)
Zaktualizowałem mój post. Możesz zobaczyć proszę? Jak zrobić by porównało mi zawartości plikow i jesli TRUE przeniesie do etykieta1 a jesli FALSE to do etykieta2?

Ja to widze tak:

Gdy fc porow3.txt porow4.txt jest taka sama to idź do etykieta1

Gdy fc porow3.txt porow4.txt jest rozna to idz do etykieta2

Jednak nie wiem jak to ubrać w komendy..
komentarz 21 października 2016 przez niezalogowany

Gdy 2 pliki są identyczne, to output fc jest zawsze taki sam, sprawdź czy zwraca odpowiedni komunikat:

>fc .bash_profile .bash_profile
Comparing files .bash_profile and .BASH_PROFILE
FC: no differences encountered

 

komentarz 21 października 2016 przez Matty Nowicjusz (150 p.)
edycja 21 października 2016 przez Matty

Tak, FC: no differences encountered, jednak nie mam pomysłu jak to wykorzystać.

Strzelam że coś takiego jednak zawsze wychodzi errorlevel równy 1 bo pliki roznia sie nazwa..

@echo off
cls
echo Witaj w porownywarce plikow. Pamietj aby w atrybutach uruchamiania wpisac kolejno katalogi ktore chcesz porownac.
pause
dir /s %1 > porow1.txt 
dir /s %2 > porow2.txt

fc porow1.txt porow2.txt
ECHO ErrorLevel: %ERRORLEVEL%

if errorlevel 1 goto etykieta1
if errorlevel 0 goto etykieta2

:etykieta1
echo --------------------------------
echo Zawartosc jest identyczna.
goto koniec

:etykieta2
echo --------------------------------
echo Zawartosc jest rozna.
goto koniec

:koniec
echo --------------------------------

echo Koniec programu
pause
@echo off
cls
echo Witaj w porownywarce plikow. Pamietaj aby w atrybutach uruchamiania wpisac kolejno katalogi ktore chcesz porownac.
pause
dir /b %1 > porow1.txt 
dir /b %2 > porow2.txt

fc porow1.txt porow2.txt
ECHO ErrorLevel: %ERRORLEVEL%

if errorlevel 1 goto etykieta2
if errorlevel 0 goto etykieta1

:etykieta1

echo Zawartosc jest identyczna.
goto koniec

:etykieta2

echo Zawartosc jest rozna.
goto koniec

:koniec


echo Koniec programu
pause

^Tak działa ale nie ma porownania dat itp jedynie subfoldery, ich ilosc i nazwa

komentarz 21 października 2016 przez Matty Nowicjusz (150 p.)
ok dałem rade :)

Podobne pytania

0 głosów
3 odpowiedzi 2,786 wizyt
pytanie zadane 6 stycznia 2017 w Systemy operacyjne, programy przez Daaa22 Dyskutant (8,250 p.)
–3 głosów
1 odpowiedź 2,103 wizyt
pytanie zadane 15 września 2017 w Inne języki przez Reavege Nowicjusz (120 p.)
0 głosów
1 odpowiedź 1,046 wizyt
pytanie zadane 24 lutego 2017 w Inne języki przez Shiro Stary wyjadacz (10,300 p.)

93,741 zapytań

142,676 odpowiedzi

323,294 komentarzy

63,319 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...