x-kom hosting

CMD - jak zabezpieczyć się przed nadpisaniem pliku przy przenoszeniu ?

kukigr
utworzono
utworzono

Witam

Znalazłem programik, który przenosi zdjęcia do odpowiednich katalogów po nazwie zdjęcia.

lista zdjęć

2015_07_12 22_05_09_0006.jpg

2015_09_25 17_50_53_0007.jpg

2016_06_25 12_31_46_0013.JPG

2017_07_23 10_07_09_0008.jpg

2017_07_23 10_07_13_0009.jpg

2017_07_23 10_07_26_0010.jpg

2017_07_27 15_51_34_0011.jpg

2017_07_27 15_51_45_0012.jpg

 

Wszystko gra, tylko w przypadku jak będzie próba przeniesienia pliku (zdjęcia) do katalogu w którym znajduje się plik o takiej samej nazwie (mało prawdopodobne ale możliwe), to programik mi go nadpisze bez komunikatu.

 

2015_07_12

2015_07_12 22_05_09_0006.jpg

 

2015_09_25

2015_09_25 17_50_53_0007.jpg

 

2016_06_25

2016_06_25 12_31_46_0013.JPG   <- przykładowo jeśli w takim katalogu już był plik o tej nazwie (niekoniecznie ta sama zawartość zdjęcia) to zostanie ono nadpisane nowym plikiem

 

2017_07_23

2017_07_23 10_07_09_0008.jpg

2017_07_23 10_07_13_0009.jpg

2017_07_23 10_07_26_0010.jpg

 

2017_07_27

2017_07_27 15_51_34_0011.jpg

2017_07_27 15_51_45_0012.jpg

 

 

Moje pytanie

jak zabezpieczyć się przed nadpisaniem pliku przy przenoszeniu

ta linia programu ->>  move "%%A" "!folname!"   / zmień nazwę pliku jeśli w tym katalogu już istnieje plik o tej samej nazwie. podaj komunikat o przeniesieniu z nową nazwą (stara_nazwa_pliku + "_nr_001" )

----------------------------------------------------------------

@echo off
setlocal enabledelayedexpansion
for %%A in (*.psd *.jpg) do

(
   echo file found  %%A
   for /f "delims=" %%B in ("%%A") do set fname=%%~nB
   for /f "delims=" %%C in ("%%A") do set fextn=%%~xC

   for /f "tokens=1* delims= " %%D in ("!fname!") do set folname=%%D
   echo folder name !folname!
   if not exist "!folname!"

    (
      echo Folder !folname! does not exist, creating
      md "!folname!"  

    )

     else

    (
      echo Folder !folname! exists
      )
   echo Moving file %%A to folder !folname!
   move "%%A" "!folname!"
  )
echo Finished
pause

 

Dark_Moon
komentarz
komentarz

Po prostu latwiej bedzie nie uzywac tego "programu" a zamiast tego uzyc Total Commander. Zrobisz to samo a program zawsze cie ostrzeze i bedzies mial opcje zmiany nazwy. Bedziesz mogl takze porownac pliki wg zawartosci binarnej czy sa takie same. 

Oprocz tego istnieja programy darmowe ktore takie rzeczy robia maja mnostwo opcji nie rozumiem po co sie meczyc z takim prymitywnym programem.

Pozniej podesle link do takigo programu.

kukigr
komentarz
komentarz
Teraz, Dark_Moon napisał:

Po prostu latwiej bedzie nie uzywac tego "programu" a zamiast tego uzyc Total Commander. Zrobisz to samo a program zawsze cie ostrzeze i bedzies mial opcje zmiany nazwy. Bedziesz mogl takze porownac pliki wg zawartosci binarnej czy sa takie same. 

Oprocz tego istnieja programy darmowe ktore takie rzeczy robia maja mnostwo opcji nie rozumiem po co sie meczyc z takim prymitywnym programem.

Pozniej podesle link do takigo programu.

 

Mam Total Commander  i używam go. Jednak nie wiem w jaki sposób Total Commander mógłby mi automatycznie ze "sterty" plików poprzenosić pliki np o nazwie: 

"2015_07_12 22_05_09_0006.jpg" do katalogu, który jeszcze nie istnieje, a w tej sytuacji trzeba go założyć o nazwie "2015_07_12" z części nazwy pliku.

Jeśli wiesz jak to zrobić to proszę o pełną instrukcję.

Dark_Moon
komentarz
komentarz

Recznie. Kopiujesz czesc nazwy pliku wklejasz jako nazwe przy poleceniu utworz katalog. Nastepnie segregujesz pliki wg nazwy zaznaczasz wszystkie o tej nazwie co chcesz i przenosisz.

Albo w wyszukiwaniu plikow wpisujesz 2015_07_12*.jpg

TC znajduje wszystkie pliki z tego dnia. Gwiazdka oznacza ze dalsza czesc nazwy moze byc dowolna wiec obojetnie jaka by to nie byla godzina TC znajdzie wszystkie pliki z tego dnia. I ze wszystkich katalogow a nie tylko z jednego. Musisz wszystkie katalogi umiescic w okienku do wyszukiwania. Przenosisz i tyle. Nie martwisz sie czy ten skrypt jest dobrze napisany czy nie bo TC cie ostrzeze jezeli to bedzie ta sama nazwa. Takich skryptow to sie kiedys uzywalo w czasach jak jeszcze byli ludzie ktorzy je potrafili poprawnie napisac.

 

kukigr
komentarz
komentarz

No tak to jak robiłem przed tym programikiem.

Zajmuje mi to sporo czasu bo mam do posortowania zdjęć z kilkunastu lat. Więc ręcznie tego już mi się nie chce robić. 

 

Raciawelli
komentarz
komentarz

możesz po prostu dodać if sprawdzający, czy w podanej lokalizacji istnieje już plik nazwie takiej samej jak plik który chcesz przenieść i jeśli istnieje użyć rename a dopiero potem przenieść plik. 

kukigr
komentarz
komentarz
29 minut temu, Raciawelli napisał:

możesz po prostu dodać if sprawdzający, czy w podanej lokalizacji istnieje już plik nazwie takiej samej jak plik który chcesz przenieść i jeśli istnieje użyć rename a dopiero potem przenieść plik. 

 

No i o to mi chodzi tylko jak to napisać?

Dark_Moon
komentarz
komentarz

Możesz to też zrobić tym programem, który posiadasz bez unowocześniania go. Skopiuj sobie wszystkie pliki, które chcesz przenieść za pomocą tego programu do innego katalogu jako te, które nie będą ruszane. Po prostu zrób ich kopię zapasową. Następnie użyj tego twojego programu i przenieś wszystkie pliki. Jak już wszystko poukładasz porównaj ilość plików w kopii zapasowej z tymi które poukładał ten program. Jak ilość będzie się zgadzać to nic nie zostało nadpisane. Jak w kopi zapasowej będziesz miał więcej to policzysz ile ci brakuje i je znajdziesz, porównasz co jest nie tak zmienisz nazwę i dodasz z kopi zapasowej. No już prościej się nie da chyba.

Poniżej program, który potrafi znaleźć oryginalną datę zrobienia zdjęcia a nie datę zapisania pliku na dysku.

https://www.xnview.com/en/xnview/#downloads

Tam poniżej tych cen są opcje pobrania za darmo.

A tutaj jak to zrobić

http://www.komputerswiat.pl/poradniki/programy/xnview/2011/03/data-zrobienia-zdjecia-jako-nazwa-pliku.aspx

Być może to znasz ale podałem, bo to ciekawy program.

 

kukigr
komentarz
komentarz (edytowane)

Zdjęcia właśnie przerabiam programem ale irfanView-em.

Ma on opcje przetwarzania wsadowego gdzie podajesz $E36867_#### a w wyniku otrzymujesz nazwę pliku z daty utworzenia zdjęcia właśnie w postaci 

"2017_07_23 10_07_09_0008.jpg"

Gdyby dodać datę wykonania czynności (choćby czas w postaci 12:27:14 -> 122714) do tej daty to nie było by w ogóle problemu, bo nigdy nie będzie pliku o takiej samej nazwie.

 

Po prostu potrzebuję dodać pętlę w tym programiku by sprawdzała czy istnieje taki plik w katalogu przed jego przeniesieniem.

Jeśli tak to dodaj cokolwiek (jakiś znaczek literę) i przenieś nowy plik.

O takie "zabezpieczenie" mi chodzi.

 

Raciawelli
komentarz
komentarz

Ostatni raz bawiłem się w takie rzeczy wieki temu.

cd "!folname!" //przenosimy się do folderu, którego zawartość sprawdzamy
if not exist "%%A" //czy plik istnieje

    (
    	cd.. //jeśli nie, wracamy do poprzedniego folderu i przenosimy plik normalnie
        echo Moving file %%A to folder !folname!
        move "%%A" "!folname!"
    )

     else

    (
     	rename "%%A" "%%A (2)" //jeśli istnieje, zmieniamy nazwę
        cd..
        echo Moving file %%A to folder !folname!
		move "%%A" "!folname!"
    )

 

Wciąż szukasz rozwiązania problemu? Napisz teraz na forum!

Możesz zadać pytanie bez konieczności rejestracji - wystarczy, że wypełnisz formularz.

×
×
  • Dodaj nową pozycję...

Powiadomienie o plikach cookie

Strona wykorzystuje pliki cookies w celu prawidłowego świadczenia usług i wygody użytkowników. Warunki przechowywania i dostępu do plików cookies możesz zmienić w ustawieniach przeglądarki.