Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien
Toon posts:

[BAT] Multi-copy + datumcheck

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hoi jongens,

Ik heb een script geschreven waarmee ik elke maand van de servers onze MDB's kopieer naar een workstation.
Het probleem is dat alle MDB's in subdirs zitten en dezelfde naam hebben... Dus mijn script voegt telkens een nr toe en schrijft ze vervolgens weg in 1 map.
Dit werkt in elk geval allemaal.

MAAR nu is het ook de bedoeling om op de gewijzigde datum te checken, omdat alle oudere files geskipped moeten worden.

Ik heb dit met copy proberen te doen, maar die geeft me geen optie om op datum te checken.
Vervolgens heb ik xcopy gebruikt, waarbij het wel lukt om op datum te checken.
Maar nu vraagt het script tijdens elke file-copy of het om een dir of een file gaat (D or F), dus moet ik voor 100 files, 100 keer op F drukken -_-

Weet er iemand hier een oplossing voor?

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
@echo off

setlocal


::Define values
set basedir=\\server\basedir\
set filename=klanten.mdb
set targetdir=c:\localdir\

::Basedir must end in \
if "%basedir:~-1,1%" NEQ "\" set basedir=%basedir%\
if "%targetdir:~-1,1%" NEQ "\" set targetdir=%targetdir%\

set /a Count=0

::find/process all files
for /R %basedir% %%i in (%filename%) do call :ProcessFile "%%i"

:ProcessFile
set PathNameExt=%~1
if "%PathNameExt%" EQU "" goto :eof
if not exist "%PathNameExt%" goto :eof
set Name=%~n1%
set Ext=%~x1%

set /a Count=%Count%+1


xcopy.exe %PathNameExt% %targetdir%%Name%.%Count%%Ext% /D:01-09-2009

  • The Eagle
  • Registratie: Januari 2002
  • Laatst online: 17:44

The Eagle

I wear my sunglasses at night

Probeer dit eens:

code:
1
echo F | xcopy.exe %PathNameExt% %targetdir%%Name%.%Count%%Ext% /D:01-09-2009

Zo kun je namelijk een keypress meegeven met het xcopy-commando :)

Al is het nieuws nog zo slecht, het wordt leuker als je het op zijn Brabants zegt :)


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • DukeBox
  • Registratie: April 2000
  • Laatst online: 16:01

DukeBox

loves wheat smoothies

Anders zou je ook naar een expect scriptje kunnen kijken.

Duct tape can't fix stupid, but it can muffle the sound.


  • Domokoen
  • Registratie: Januari 2003
  • Laatst online: 03-11 22:45
Als je iets als RAR gebruikt, kan je het bestand ook inpakken ipv kopieren. En als het bestand dan al erin zit (hetzelfde), dan wordt deze overgeslagen. Verder kan je met de command-line opties van RAR automatisch een datum/tijd aan de filename toevoegen.

  • alt-92
  • Registratie: Maart 2000
  • Niet online

alt-92

ye olde farte

Verwijderd schreef op zondag 18 januari 2009 @ 23:27:
Hoi jongens,

Ik heb een script geschreven
Zit je vast aan batch, of kun je ook andere scripttalen met veelzijdiger gedrag dan NT batch (datum shizzle is notoir lastig portable met NT batch vanwege taalinstellingen > http://www.robvanderwoude.com/datetime.html ) iets doen?

VBscript of PowerShell kun je bijvoorbeeld met UTC tijden laten werken, evenals makkelijk de LastModified datum/tijd opvragen.

ik heb een 864 GB floppydrive! - certified prutser - the social skills of a thermonuclear device


  • Wiethoofd
  • Registratie: Juli 2007
  • Laatst online: 17-11 00:47

Wiethoofd

Broadcast TOM

Je zou Wikipedia: robocopy kunnen proberen, die is een stukje veelzijdiger dan (x)copy. ;)

Volg me op Twitter/X & Bluesky


  • DukeBox
  • Registratie: April 2000
  • Laatst online: 16:01

DukeBox

loves wheat smoothies

Wiethoofd schreef op maandag 19 januari 2009 @ 16:08:
Je zou Wikipedia: robocopy kunnen proberen, die is een stukje veelzijdiger dan (x)copy. ;)
Daar kan je geen datum manipilatie mee, ook niet m.b.v. variabelen.

Duct tape can't fix stupid, but it can muffle the sound.


  • _H_G_
  • Registratie: September 2002
  • Laatst online: 27-11 07:51
DukeBox schreef op maandag 19 januari 2009 @ 20:23:
[...]

Daar kan je geen datum manipilatie mee, ook niet m.b.v. variabelen.
Ligt eraan wat TS precies wil en of MAXAGE optie voldoende functionaliteit biedt. Als TS alleen nieuwe bestanden wil kopiëren, dan is robocopy helemaal ideaal.

  • DukeBox
  • Registratie: April 2000
  • Laatst online: 16:01

DukeBox

loves wheat smoothies

_H_G_ schreef op dinsdag 20 januari 2009 @ 08:28:
[...]


Ligt eraan wat TS precies wil en of MAXAGE optie voldoende functionaliteit biedt. Als TS alleen nieuwe bestanden wil kopiëren, dan is robocopy helemaal ideaal.
Aan het script te zien moet de datum in de naam komen.

Duct tape can't fix stupid, but it can muffle the sound.


  • Wiethoofd
  • Registratie: Juli 2007
  • Laatst online: 17-11 00:47

Wiethoofd

Broadcast TOM

Je kunt ook gewoon handmatig eenmalig de datum invoeren in een prompt en dat vervolgens in je maplocatie verwerken.
code:
1
set /p datum=Vul de datum in voor de mapnaam:

Vervolgens %datum% in je mapnaam toevoegen en voila, klaar is je script :P

Volg me op Twitter/X & Bluesky


Verwijderd

Topicstarter
Wiethoofd schreef op dinsdag 20 januari 2009 @ 11:35:
Vervolgens %datum% in je mapnaam toevoegen en voila, klaar is je script :P
En hoe doe ik dat precies?

Weet er trouwens iemand hoe ik de naam van de (op het 2de niveau) bovenliggende directory meegeef?
Dus bijvoorbeeld ik zoek in de map bedrijven\ naar alle files met naam "klanten.mdb", elke map onder bedrijven (x) heeft een map data\ waarin die files klanten.mdb zitten.

Zo krijg je dus: ..\bedrijven\(x)\data\klanten.mdb
Ik wil nu de naam van die map (x) gebruiken als filename voor mijn gekopieerde mdb's ipv die teller erachter te zetten.

Kan iemand mij zeggen hoe ik dus de naam van de map (x) kan opvragen, toewijzen aan een variabele en uiteindelijk toevoegen aan de file-name?

  • ajouin
  • Registratie: Juli 2001
  • Laatst online: 20-11 16:20
echo F|xcopy ....

vult voor jou automatisch antwoord F in na opdracht xcopy

  • Nielson
  • Registratie: Juni 2001
  • Laatst online: 12:25
Verwijderd schreef op maandag 26 januari 2009 @ 10:49:
[...]
Kan iemand mij zeggen hoe ik dus de naam van de map (x) kan opvragen, toewijzen aan een variabele en uiteindelijk toevoegen aan de file-name?
Met de opdracht FOR kun je erg veel doen. Voorbeeldje:
code:
1
FOR /F "TOKENS=1-5 DELIMS=\" %%A IN ('DIR KLANTEN.MDB /S/B') DO COPY "%%A\%%B\%%C\%%D\%%E" "C:\KLANTENMDBS\%%C.MDB"

Wat dit doet is de uitkomst van het dir commando in stukjes hakken, gescheiden door de \, en toewijzen aan de variabelen, deze worden vervolgens weer aan elkaar geplakt om de bron dir van het copy commando te vormen, en ééntje wordt gebruikt voor de naam van het doelbestand. Aantal tokens en variabelen moet je zelf mogelijk nog aanpassen, afhankelijk van je directory structuur. Voor het voorbeeldje heb ik gebruikt C:\Bedrijven\Bedrijfsnaam\Data\Klanten.mdb

[ Voor 4% gewijzigd door Nielson op 26-01-2009 22:38 ]

Pagina: 1