Skocz do zawartości
Zamknięcie Forum PC LAB

Szanowny Użytkowniku,

Informujemy, że za 30 dni tj. 30 listopada 2024 r. serwis internetowy Forum PC LAB zostanie zamknięty.

Administrator Serwisu Forum PC LAB - Ringier Axel Springer Polska sp. z o.o. z siedzibą w Warszawie: wypowiada całość usług Serwisu Forum PC LAB z zachowaniem miesięcznego okresu wypowiedzenia.

Administrator Serwisu Forum PC LAB informuje, że:

  1. Z dniem 29 listopada 2024 r. zakończy się świadczenie wszystkich usług Serwisu Forum PC LAB. Ważną przyczyną uzasadniającą wypowiedzenie jest zamknięcie Serwisu Forum PC LAB
  2. Dotychczas zamowione przez Użytkownika usługi Serwisu Forum PC LAB będą świadczone w okresie wypowiedzenia tj. do dnia 29 listopada 2024 r.
  3. Po ogłoszeniu zamknięcia Serwisu Forum od dnia 30 października 2024 r. zakładanie nowych kont w serwisie Forum PC LAB nie będzie możliwe
  4. Wraz z zamknięciem Serwisu Forum PC LAB, tj. dnia 29 listopada 2024 r. nie będzie już dostępny katalog treści Forum PC LAB. Do tego czasu Użytkownicy Forum PC LAB mają dostęp do swoich treści w zakładce "Profil", gdzie mają możliwość ich skopiowania lub archiwizowania w formie screenshotów.
  5. Administrator danych osobowych Użytkowników - Ringier Axel Springer Polska sp. z o.o. z siedzibą w Warszawie zapewnia realizację praw podmiotów danych osobowych przez cały okres świadczenia usług Serwisu Forum PC LAB. Szczegółowe informacje znajdziesz w Polityce Prywatności

Administrator informuje, iż wraz z zamknięciem Serwisu Forum PC LAB, dane osobowe Użytkowników Serwisu Forum PC LAB zostaną trwale usunięte ze względu na brak podstawy ich dalszego przetwarzania. Proces trwałego usuwania danych z kopii zapasowych może przekroczyć termin zamknięcia Forum PC LAB o kilka miesięcy. Wyjątek może stanowić przetwarzanie danych użytkownika do czasu zakończenia toczących się postepowań.

Temat został przeniesiony do archiwum

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

Rufik_

Potrzebuję pomocy z plikiem .bat

Rekomendowane odpowiedzi

Cześć, z góry dzięki wszystkim za pomoc. Otóż napisałem taki plik .bat - jego zadaniem jest robić kopię pulpitów i dokumentów na serwerze wielu stacji roboczych. Plik uruchamiany na serwerze.

 


:start

timeout 1

set IB=
set /p IB=<"IB.txt"

@echo off
net use /delete k: /y >nul
net use k: \\%IB%\c$\users\user /user:User nokia >nul
@echo on

robocopy k:\Desktop\ d:\stacje\%IB%\Desktop /s /MAX:102400 /LOG:d:\stacje\logs\%IB%_deskt_%date%.txt /r:1 /w:1 >nul
robocopy k:\Documents\ d:\stacje\%IB%\Documents /s /MAX:102400 /LOG:d:\stacje\logs\%IB%_docs_%date%.txt /r:1 /w:1 >nul
net use /delete k: /y >nul
7z u -r -mx=7 -ms=off D:\stacje\%IB%_%date%.7z D:\stacje\%IB%
rmdir /s /q d:\stacje\%IB%

forfiles /p "d:\stacje\logs" /s /m *.* /c "cmd /c Del @path" /d -7 
forfiles /p "d:\stacje" /s /m *.* /c "cmd /c Del @path" /d -7 

timeout 1

goto start

quit

 

 

Chodzi, o to żeby w miejscu %IB% podstawiało mi adresy IP z pliku IB.txt. Plik IB.txt do testów wygląda tak:

 

192.168.0.1

192.168.0.2

192.168.0.3

 

itp.

 

Problem w tym, że komenda się wykonuje poprawnie, ale bierze pod uwagę tylko pierwszy wpisany adres IP. a chciałbym, żeby najpierw zrobiła kopia adresu IP1, potem IP2, potem IP3 i tak do końca listy. Po zakończeniu listy by okno CMD się zamknęło.

 

Bardzo proszę o pomoc, bo przegooglowałem co się dało i nie znalazłem rozwiązania, a sądzę że da się to tak ustawić. Dzięki za pomoc i pozdrawiam.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

a czy przypadkiem adresy nie powinny być zapisane w innej formie ? Np.: "192.168.0.1" , "192.168.0.2" , "192.168.0.3" - w jednej linii.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Dla mnie zawsze łatwiej było poprostu odpalić Delphi i napisać sobie normalny programik niż męczyć się z kosmiczną składnią w skryptach. Wiem że to taki overkill dla zwykłego backupu ale już tak mam.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

a czy przypadkiem adresy nie powinny być zapisane w innej formie ? Np.: "192.168.0.1" , "192.168.0.2" , "192.168.0.3" - w jednej linii.

 

No właśnie tego nie wiem, testowałeś? Sądzę, że jest jakiś standard jak to powinno być, tylko go nie znam :)

 

Co do Delphi to nie jestem tutaj ekspertem.

 

Edit:

Jakieś pomysły? :) 

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

nie testowałem... ale być może problem jest ze "złym" formatem pliku txt. Musisz potestować.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

nie testowałem... ale być może problem jest ze "złym" formatem pliku txt. Musisz potestować.

 

To to ja podejrzewam, tylko na chybił trafił to trochę ciężko - na chybił trafił próbowałem bez skutku :D Mi się wydaje, że pętla ma tu też jakąś rolę? Co myślicie?

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

PAnie i Panowie, to jak Waszym zdaniem powinien wyglądać ten skrypt i plik .txt? :) Będę wdzięczny za poprawienie moich błędów :)

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Plik napewno tak jak miałeś. Czyli jeden wpis na linię. Co do reszty to przestudiuj ten przykład

 

setlocal EnableDelayedExpansion
set outfile=c:\temp\tempout.txt
del %outfile%
FOR /f "tokens=*" %%f in (dlist.txt) DO (
   echo.
   echo --------------------
   set indir=%%f
   echo Basediv indir=!indir!
   echo Processing division !indir!

   echo. >> %outfile%
   echo {DIVNAME=!indir!} >> %outfile%
   pause   
)

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Plik napewno tak jak miałeś. Czyli jeden wpis na linię. Co do reszty to przestudiuj ten przykład

 

setlocal EnableDelayedExpansion
set outfile=c:\temp\tempout.txt
del %outfile%
FOR /f "tokens=*" %%f in (dlist.txt) DO (
   echo.
   echo --------------------
   set indir=%%f
   echo Basediv indir=!indir!
   echo Processing division !indir!

   echo. >> %outfile%
   echo {DIVNAME=!indir!} >> %outfile%
   pause   
)

 

Dzięki za wskazówkę, ale szczerze nic mi ten przykład nie mówi :D Nie jestem w tym, aż tak biegły może dlatego. Może pomógłbyś mi dopieścić ten mój skrypt jakby to miało wyglądać? Byłbym niezmiernie wdziędzny i zobowiązany :)

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Uproszczę to może załapiesz jak to działa.

Bieżąca linia z pliku IB.txt jest przechowywana w zmiennej %%f. Następnie wartość ze %%f kopiujemy do własnej zmiennej i ją wyświetlamy.

 

@echo off
setlocal EnableDelayedExpansion
FOR /f "tokens=*" %%f in (IB.txt) DO ( 

   set IB=%%f
   echo !IB!

)

 

 

 

 

Nie jestem pewien czy powinnobyć %IB% czy !IB! w ścieżkach

@echo off
setlocal EnableDelayedExpansion
FOR /f "tokens=*" %%f in (IB.txt) DO ( 

set IB=%%f

@echo off
net use /delete k: /y >nul
net use k: \\%IB%\c$\users\user /user:User nokia >nul
@echo on

robocopy k:\Desktop\ d:\stacje\%IB%\Desktop /s /MAX:102400 /LOG:d:\stacje\logs\%IB%_deskt_%date%.txt /r:1 /w:1 >nul
robocopy k:\Documents\ d:\stacje\%IB%\Documents /s /MAX:102400 /LOG:d:\stacje\logs\%IB%_docs_%date%.txt /r:1 /w:1 >nul
net use /delete k: /y >nul
7z u -r -mx=7 -ms=off D:\stacje\%IB%_%date%.7z D:\stacje\%IB%
rmdir /s /q d:\stacje\%IB%

forfiles /p "d:\stacje\logs" /s /m *.* /c "cmd /c Del @path" /d -7 
forfiles /p "d:\stacje" /s /m *.* /c "cmd /c Del @path" /d -7 

)

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Uproszczę to może załapiesz jak to działa.

Bieżąca linia z pliku IB.txt jest przechowywana w zmiennej %%f. Następnie wartość ze %%f kopiujemy do własnej zmiennej i ją wyświetlamy.

 

@echo off
setlocal EnableDelayedExpansion
FOR /f "tokens=*" %%f in (IB.txt) DO ( 

   set IB=%%f
   echo !IB!

)

 

 

 

 

Nie jestem pewien czy powinnobyć %IB% czy !IB! w ścieżkach

@echo off
setlocal EnableDelayedExpansion
FOR /f "tokens=*" %%f in (IB.txt) DO ( 

set IB=%%f

@echo off
net use /delete k: /y >nul
net use k: \\%IB%\c$\users\user /user:User nokia >nul
@echo on

robocopy k:\Desktop\ d:\stacje\%IB%\Desktop /s /MAX:102400 /LOG:d:\stacje\logs\%IB%_deskt_%date%.txt /r:1 /w:1 >nul
robocopy k:\Documents\ d:\stacje\%IB%\Documents /s /MAX:102400 /LOG:d:\stacje\logs\%IB%_docs_%date%.txt /r:1 /w:1 >nul
net use /delete k: /y >nul
7z u -r -mx=7 -ms=off D:\stacje\%IB%_%date%.7z D:\stacje\%IB%
rmdir /s /q d:\stacje\%IB%

forfiles /p "d:\stacje\logs" /s /m *.* /c "cmd /c Del @path" /d -7 
forfiles /p "d:\stacje" /s /m *.* /c "cmd /c Del @path" /d -7 

)

 

To czyli jak powinien wyglądać kod .bat i IB.txt - bo nadal nie czaję, zwłaszcza tego:

 

 [code]@echo off
setlocal EnableDelayedExpansion
FOR /f "tokens=*" %%f in (IB.txt) DO ( 

set IB=%%f 

 

Gdzie to wstawić?

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

No przecież masz gotowca... Sam go nawet przekleiłeś cytując mojego posta.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

No przecież masz gotowca... Sam go nawet przekleiłeś cytując mojego posta.

 

Sorry może jestem głupi, ale gdzie ten gotowiec jak to wkleić? :D Wpisz mi jak możesz .bat i ib.txt? :D

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

To może lepiej zainstaluj na każdej stacji jakiś darmowy soft do backupu?

Wybór jest spory, jak choćby Veeam albo Cobian

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

To może lepiej zainstaluj na każdej stacji jakiś darmowy soft do backupu?

Wybór jest spory, jak choćby Veeam albo Cobian

 

Wiesz mówimy o jakichś 350 komputerach :) Mając na uwadze inne obowiązki jest to raczej niewykonalne :)

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Mówiąc o 350 komputerach dziwię się, że jeszcze nie ma takiego czegoś zainstalowanego w dodatku z centralnym serwerem zarządzającym.

Ewentualnie wszystkie pliki powinny być trzymane na udziale sieciowym lub kilku i ten udział był by backupowany każdego dnia.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Mówiąc o 350 komputerach dziwię się, że jeszcze nie ma takiego czegoś zainstalowanego w dodatku z centralnym serwerem zarządzającym.

Ewentualnie wszystkie pliki powinny być trzymane na udziale sieciowym lub kilku i ten udział był by backupowany każdego dnia.

 

Powinny. Masz rację, ale to jest stan zastały. Nawet domena nie działa. W domenie AD było by łatwiej. Póki co muszę się posiłkować protezą .bat. Pomożesz?

 

PS. Serwerów mamy z 25, ale każdy od czegoś innego. Na razie musi być .bat.

 

Pomożesz?

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Ale czy Ty rozumiesz, że to co napisałeś nie działa?!

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Średnio pamiętam tak antyczne rozwiązania. Prędzej coś w PowerShellu dało by się wykombinować.

 

Poniższy skrypt zapisujesz z rozszerzeniem .ps1

$complist_org = Get-Content .\IB.txt
$complist = @()
$data = get-date -f dd-MM-yyyy

#Tu wpisz haslo do konta ktore ma dostep do komputerow
$pass="supertajnehasloktorymniejestnokia"| ConvertTo-SecureString -AsPlainText -Force
$cred = New-Object System.Management.Automation.PsCredential('user',$pass)

foreach ($comp in $complist_org) {
   if(Test-Connection -Computername $comp -count 2 -Quiet) {$complist += $comp}
   else {Write-Host $comp jest offline}
}

foreach ($computer in $complist) {
   if (Get-PSDrive -Name "K") {
       Remove-PSDrive -Name "K"
   }
   $log1 = $comp + "_desk_" + $data + ".txt"
   $log1 = $comp + "_docs_" + $data + ".txt"
   $arch = $comp + "_" + $data
   New-PSDrive -Name "K" -PSProvider "FileSystem" -Credential $cred -Root "\\$computer\c$\users\user"
   robocopy K:\Desktop\ d:\stacje\$comp\Desktop /s /copyall /np /MAX:102400 /LOG:d:\stacje\logs\$log1 /r:1 /w:1 >nul
   robocopy K:\Documents\ d:\stacje\$comp\Documents /s /copyall /np /MAX:102400 /LOG:d:\stacje\logs\$log2 /r:1 /w:1 >nul
   Remove-PSDrive -Name "K"
   7z u -r -mx=7 -ms=off D:\stacje\$arch.7z D:\stacje\$comp
   Remove-Item –Path d:\stacje\$comp –Recurse -Force
}

 

Nie testowałem. Wszystko było pisane "na sucho".

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Tak jak sądziłem musi być !IB! zamiast %IB%.

 

@echo off
setlocal EnableDelayedExpansion
FOR /f "tokens=*" %%f in (IB.txt) DO ( 

       set IB=%%f

       net use /delete k: /y >nul
       net use k: \\!IB!\c$\users\user /user:User nokia >nul

       robocopy k:\Desktop\ d:\stacje\!IB!\Desktop /s /MAX:102400 /LOG:d:\stacje\logs\!IB!_deskt_%date%.txt /r:1 /w:1 >nul
       robocopy k:\Documents\ d:\stacje\!IB!\Documents /s /MAX:102400 /LOG:d:\stacje\logs\!IB!_docs_%date%.txt /r:1 /w:1 >nul
       net use /delete k: /y >nul
       7z u -r -mx=7 -ms=off D:\stacje\!IB!_%date%.7z D:\stacje\!IB!
       rmdir /s /q d:\stacje\!IB!

       forfiles /p "d:\stacje\logs" /s /m *.* /c "cmd /c Del @path" /d -7 
       forfiles /p "d:\stacje" /s /m *.* /c "cmd /c Del @path" /d -7 

)

 

Musi teraz działać. Zrobiłem prosty test z kopiowaniem plików i poszło. W pliku IB.txt miałem nazwy plików (bez rozszeżenia i ścieżki).

 

192.168.0.1
192.168.0.2
192.168.0.3

 

 

@echo off
setlocal EnableDelayedExpansion
FOR /f "tokens=*" %%f in (IB.txt) DO ( 

       set IB=%%f     

       copy !IB!.txt !IB!_%date%.txt


)

 

Nowe skopiowane pliki miały poprawnie doklejoną date.

c42414d685.png

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

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

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

×
×
  • Dodaj nową pozycję...