Skocz do zawartości
Geep87

Zmienna %TIME% w nazwie pliku

Rekomendowane odpowiedzi

Napisano (edytowane)

Mam ustawiony plik bat który robi mi cyklicznie zip-a z z jednego folderu

zip -r "backup_%DATE%.zip" *.*

ale potrzebowałbym jeszcze wstawić znacznik czasu jak będzie kilka zip-ów z jednego dnia, by ich nie nadpisywał. Zmienna %TIME% nie zadziała  bo daje w odpowiedzi godzinę w formacie "HH:MM:SS" gdzie ":" nie jest dopuszczony w nazwie, jakieś pomysły?

Edytowane przez Geep87

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Ze zmiennych możesz wycinać fragmenty.

Np.

%TIME:~3,2%

Wypisze samą minutę. 3 to indeks (liczony od zera, a więc 4ty znak) a 2, to ile znaków (ale jeszcze się upewnij, że format godzinowy przed dziesiątą jest dwucyfrowy).

Powinno wystarczyć wycięcie godziny oddzielnie i minuty oddzielnie.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

idealnie działa, dziękuję, 

nawet mogę  złożyć  w całość godzinę i minutę i jest  idealnie

%TIME:~0,2%%TIME:~3,2%

%TIME:~0,2%%TIME:~3,2%

 

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Jeszcze jedno zagadnienie w temacie, pliki dalej są wysyłane na FTP-a, korzystam z polecenia 

ftp -i -n -s:list.ftp

gdzie przykładowa zawartość "list.ftp"

open ADRES FTP
literal user LOGIN
literal pass HASŁO
cd /autobackup
bin
put e:\temp\WERSJA1\plik1.zip
put e:\temp\WERSJA2\plik2.zip
bye

tylko teraz mając pliki z datą i godziną jak mogę wstawić do skryptu informację, by tylko najnowsze pliki (z dzisiejszą datą) kopiowały się na ftp ?

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
Napisano (edytowane)

Może coś takiego? Nie testowałem.

del /f list.ftp

echo "open ADRES FTP" > list.ftp

echo "literal user LOGIN" >> list.ftp

echo "literal pass HASŁO" >> list.ftp

echo "cd /autobackup" >> list.ftp

echo "bin" >> list.ftp

echo "put e:\temp\WERSJA1\plik1.zip" >> list.ftp

echo "put e:\temp\WERSJA2\plik2.zip" >> list.ftp

echo "bye" >> list.ftp

Tam gdzie masz plik.zip z datą robisz tak jak ci wcześniej jeż napisał.

Ps.  >> Oznacza append

PS2. Datę i godzinę umieściłbym najpierw na samym początku skryptu w zmiennej aby uniknąć sytuacji gdy kompresja zajmie ci więcej niż minutę i nowa wartość czasu będzie inna.


 
set DateTimeNow=%DATE%T%TIME:~0,2%%TIME:~3,2% 

 

Oczywiście %DATE% będziesz musiał sformatować odpowiednio aby dostać coś w formacie ISO8601 (yyyy-mm-dd)

Edytowane przez Atak_Snajpera

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
W dniu 26.01.2021 o 08:55, Geep87 napisał:

tylko teraz mając pliki z datą i godziną jak mogę wstawić do skryptu informację, by tylko najnowsze pliki (z dzisiejszą datą) kopiowały się na ftp ?

Może zrobić jeden plik z początkiem połączenia ftp, kolejny dynamicznie tworzony podczas kompresji, trzeci z kończeniem połączenia.

Schemat działania:
- podczas kompresji tworzysz nazwę pliku w zmiennej, kompresujesz katalog wykorzystując tą zmienną, dodajesz wpis do pliku z listą do wysłania korzystając z tej zmiennej (musi być zmienna, żeby nazwa się zgadzała, kompresja może chwilę zająć i minuta czy godzina się zmieni)
- w momencie wysyłania łączysz trzy pliki w jeden (np. https://stackoverflow.com/questions/30466408/windows-batch-concatenate-multiple-text-files-into-one/30466645), odpalasz ftp z tym nowym plikiem, na koniec kasujesz plik z listą

Konkretnych poleceń nie podam, bo za mało i zbyt dawno bawiłem się w bat-y.
Do zastanowienia jak rozwiązać problem kiedy coś pójdzie nie tak przy wysyłaniu. Np. uzależnić kasowanie od udanego przesłania.

Inne podejście, to wyszukiwanie np. po dacie ale wydaje mi się to bardziej skomplikowane.
Jeszcze inaczej, to wysyłanie od razu po kompresji, a nie zbieranie kilku plików.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
Napisano (edytowane)

a może inaczej, pliki z jednego dnia wrzucę przez robocopy.exe do jednego folderu , tylko jak je teraz na FTP wrzuć, bo z systemowego ftp z wiersza poleceń komendą

mput *.*

nie działa, muszę wpisać nazwy plików :(

 

 

EDIT: użyłem NcFTP i tam już poszedł bezpośrednio cały folder:
 

ncftpput -R -v -u "ftp username" -p "ftp password" ftp.adress /folder_na_ftp .\*

 

Edytowane przez Geep87

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Jak będzie się sprawdzał to chciałbym wykorzystać w obu miejscach.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
Napisano (edytowane)

Tu ci zrobiłem gotowca do backupu

https://www.mediafire.com/file/9gx0vqlopegckch/AutoBackupScript.7z/file

Gotowy skrypt wygląda tak.

@cd /d %~dp0
@set DateTimeNow=%DATE%T%TIME:~0,2%%TIME:~3,2%
@"7z\7z.exe" a -mx9 "AutoBackup_%DateTimeNow%.7z" "Backup"

@echo open [FTP_ADDRESS_HERE] > commands.ftp
@echo literal user [YOUR_USER_NAME_HERE] >> commands.ftp
@echo literal pass [YOUR_USER_PASSWORD_HERE] >> commands.ftp
@echo cd [SOME_FOLDER] >> commands.ftp
@echo bin >> commands.ftp
@echo put "AutoBackup_%DateTimeNow%.7z" >> commands.ftp
@echo bye >> commands.ftp

@ftp -i -n -s:commands.ftp | find /i "transfer complete" >nul 2>&1
@IF ERRORLEVEL 1 (
@echo [%Date% %Time:~0,8%] Error while transfering AutoBackup_%DateTimeNow%.7z >> log.txt
) ELSE (
@echo [%Date% %Time:~0,8%] File AutoBackup_%DateTimeNow%.7z transferred successfully >> log.txt
)

@del "AutoBackup_%DateTimeNow%.7z"

 

Edytowane przez Atak_Snajpera

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Dziękuję, przetestuje ale już widzę, że będzie ok :)

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się

  • Ostatnio przeglądający   0 użytkowników

    Brak zarejestrowanych użytkowników przeglądających tę stronę.

×
×
  • Dodaj nową pozycję...