Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

Ausführlich erklärter Beispielbatch - Datumsattribut geändert am per batch ändern

Anleitung Entwicklung Batch & Shell

Mitglied: Landstreicher

Landstreicher (Level 1) - Jetzt verbinden

17.07.2007, aktualisiert 26.08.2010, 20639 Aufrufe, 9 Kommentare

Hallo ,

ich habe mal wieder ein Problem!
folgendes...

Ich habe xls Dateien die ich überarbeitet habe, jetzt habe ich mir eine batchdatei geschrieben (mehr gebastelt aber es funktioniert soweit) das problem ist, ich schaffe es nur das erstelldatum damit zu ändern jedoch nicht das geändert am

weiss jemand eventuell eine lösung ? ... ach noch was, es soll in eine batch eingebaut werden.


hier mal die batch, die ich niemanden vorenthalten will.

01.
@echo off 
02.
mkdir "D:\SAP_DEL_4\Public\Checklisten\Aktuelle_Checklisten\temp" 
03.
set Quelle="D:\SAP_DEL_4\Public\Checklisten\Aktuelle_Checklisten" 
04.
set Ziel="D:\SAP_DEL_4\Public\Checklisten\Aktuelle_Checklisten\temp" 
05.
set Ziel2="D:\SAP_DEL_4\Public\Checklisten\changedate" 
06.
set counter=0 
07.
set maxcount=32 
08.
set counter2=1 
09.
set maxcount2=13 
10.
set Mon=12 
11.
set year=2007 
12.
set revday=%date% 
13.
set revtime=%time% 
14.
time 07:30 
15.
:Run 
16.
 
17.
set /a counter=%counter% + 1 
18.
if "%counter%" EQU "%maxcount%" goto :mon 
19.
 
20.
ping -n 1 localhost >nul 
21.
goto :Runnext 
22.
 
23.
:Runnext 
24.
 
25.
set a=32  
26.
set b=%counter% 
27.
 
28.
set /a gesamt=%a%-%b% 
29.
 
30.
set Day=%gesamt% 
31.
 
32.
if "%Day%"=="1" set Day=01 
33.
if "%Day%"=="2" set Day=02 
34.
if "%Day%"=="3" set Day=03 
35.
if "%Day%"=="4" set Day=04 
36.
if "%Day%"=="5" set Day=05 
37.
if "%Day%"=="6" set Day=06 
38.
if "%Day%"=="7" set Day=07 
39.
if "%Day%"=="8" set Day=08 
40.
if "%Day%"=="9" set Day=09 
41.
if "%Mon%"=="1" set Mon=01 
42.
if "%Mon%"=="2" set Mon=02 
43.
if "%Mon%"=="3" set Mon=03 
44.
if "%Mon%"=="4" set Mon=04 
45.
if "%Mon%"=="5" set Mon=05 
46.
if "%Mon%"=="6" set Mon=06 
47.
if "%Mon%"=="7" set Mon=07 
48.
if "%Mon%"=="8" set Mon=08 
49.
if "%Mon%"=="9" set Mon=09 
50.
 
51.
if exist %Quelle%\DKS_Check_%Day%.%Mon%.%year%.xls echo DKS_Check_%Day%.%Mon%.%year%.xls & goto :set 
52.
 
53.
goto :run 
54.
 
55.
:mon 
56.
set counter=1 
57.
set maxcount=32 
58.
set /a counter2=%counter2% + 1 
59.
if "%counter2%" EQU "%maxcount2%" goto :end 
60.
 
61.
ping -n 1 localhost >nul 
62.
goto :Runnext2 
63.
 
64.
:Runnext2 
65.
 
66.
set c=13  
67.
set d=%counter2% 
68.
 
69.
set /a gesamt2=%c%-%d% 
70.
 
71.
set Mon=%gesamt2% 
72.
 
73.
if "%Day%"=="1" set Day=01 
74.
if "%Day%"=="2" set Day=02 
75.
if "%Day%"=="3" set Day=03 
76.
if "%Day%"=="4" set Day=04 
77.
if "%Day%"=="5" set Day=05 
78.
if "%Day%"=="6" set Day=06 
79.
if "%Day%"=="7" set Day=07 
80.
if "%Day%"=="8" set Day=08 
81.
if "%Day%"=="9" set Day=09 
82.
if "%Mon%"=="1" set Mon=01 
83.
if "%Mon%"=="2" set Mon=02 
84.
if "%Mon%"=="3" set Mon=03 
85.
if "%Mon%"=="4" set Mon=04 
86.
if "%Mon%"=="5" set Mon=05 
87.
if "%Mon%"=="6" set Mon=06 
88.
if "%Mon%"=="7" set Mon=07 
89.
if "%Mon%"=="8" set Mon=08 
90.
if "%Mon%"=="9" set Mon=09 
91.
echo Monat %year%-%Mon% : 
92.
 
93.
 
94.
goto :run 
95.
 
96.
 
97.
 
98.
 
99.
:set 
100.
date %Day%.%Mon%.%year% 
101.
copy %Quelle%\DKS_Check_%Day%.%Mon%.%year%.xls %Ziel% 
102.
move %Ziel%\DKS_Check_%Day%.%Mon%.%year%.xls %Ziel2%  
103.
ping -n 2 172.0.0.1 >nul 
104.
goto :run 
105.
 
106.
 
107.
 
108.
:end 
109.
erase /S /q %Ziel% 
110.
rmdir %Ziel% 
111.
date %revday% 
112.
time %revtime%
vielen dank schonmal vorweg.
mfg landstreicher
Mitglied: bastla
17.07.2007 um 21:37 Uhr
Hallo Landstreicher!

An sich könnte man/frau/kind für ein derartiges Unterfangen auf eines der vielen "touch"-Tools zurückgreifen, aber zur Not geht's auch mit einem
01.
copy /b Datei.xls+,,
Um sich die Berücksichtigung des Pfades dabei zu ersparen, bietet es sich an, gleich mit einem "pushd" in das gewünschte Verzeichnis zu wechseln. Zusammen mit einigen Straffungen ergibt das mit Deinem Algorithmus in etwa folgenden Batch:
01.
@echo off & setlocal 
02.
set Quelle="D:\SAP_DEL_4\Public\Checklisten\Aktuelle_Checklisten" 
03.
set Ziel="D:\SAP_DEL_4\Public\Checklisten\changedate" 
04.
if not exist %Ziel% md %Ziel% 
05.
 
06.
set a=32 
07.
set c=13 
08.
set counter=0 
09.
set maxcount=32 
10.
set counter2=1 
11.
set maxcount2=13 
12.
set Mon=12 
13.
set year=2007 
14.
set revday=%date% 
15.
set revtime=%time% 
16.
time 07:30 
17.
pushd %Ziel% 
18.
 
19.
:Run 
20.
set /a counter+=1 
21.
if %counter% EQU %maxcount% goto :mon 
22.
ping -n 1 localhost >nul 
23.
 
24.
set /a gesamt=%a%-%counter% 
25.
set Day=0%gesamt% 
26.
set Day=%Day:~-2% 
27.
 
28.
set Mon=0%Mon% 
29.
set Mon=%Mon:~-2% 
30.
 
31.
if exist %Quelle%\DKS_Check_%Day%.%Mon%.%year%.xls echo DKS_Check_%Day%.%Mon%.%year%.xls & goto :set 
32.
goto :run 
33.
 
34.
:mon 
35.
set counter=1 
36.
set maxcount=32 
37.
set /a counter2+=1 
38.
if %counter2% EQU %maxcount2% goto :end 
39.
ping -n 1 localhost >nul 
40.
 
41.
set /a gesamt2=%c%-%counter2% 
42.
set Mon=0%gesamt2% 
43.
set Mon=%Mon:~-2% 
44.
 
45.
set Day=0%Day% 
46.
set Day=%Day:~-2% 
47.
 
48.
echo Monat %year%-%Mon% : 
49.
goto :run 
50.
 
51.
:set 
52.
date %Day%.%Mon%.%year% 
53.
copy /y %Quelle%\DKS_Check_%Day%.%Mon%.%year%.xls>nul 
54.
copy /b DKS_Check_%Day%.%Mon%.%year%.xls+,,>nul 
55.
ping -n 2 127.0.0.1 >nul 
56.
goto :run 
57.
 
58.
:end 
59.
date %revday% 
60.
time %revtime% 
61.
popd
Auf die Pausen mit dem "ping"-Befehl könnte man wohl auch verzichten ...

Feintuning wäre etwa noch hinsichtlich der Berücksichtigung der Sommerzeit möglich, aber wie Biber in solchen Fällen schon mal anmerkt: Ist ja nur ein Batch und kein Satellitensteuerungsprogramm ...

Grüße
bastla

[Edit] copy /b richtiggestellt [/Edit]
Bitte warten ..
Mitglied: bastla
17.07.2007 um 21:56 Uhr
... aber zumindest ein wenig kürzer ginge es noch:
01.
@echo off & setlocal 
02.
set Quelle="D:\SAP_DEL_4\Public\Checklisten\Aktuelle_Checklisten" 
03.
set QDat=DKS_Check_ 
04.
set Ext=xls 
05.
set Ziel="D:\SAP_DEL_4\Public\Checklisten\changedate" 
06.
if not exist %Ziel% md %Ziel% 
07.
 
08.
set revday=%date% 
09.
set revtime=%time% 
10.
time 07:30 
11.
pushd %Ziel% 
12.
 
13.
for %%i in (%Quelle%\%QDat%*.%Ext%) do call :ProcessFile "%%i" 
14.
 
15.
date %revday% 
16.
time %revtime% 
17.
popd 
18.
goto :eof 
19.
 
20.
:ProcessFile 
21.
echo %~1 
22.
set Datum=%~n1 
23.
set Datum=%Datum:~-10% 
24.
date %Datum% 
25.
copy /y %Quelle%\%QDat%%Datum%.%Ext%>nul 
26.
copy /b %QDat%%Datum%.%Ext%+,,>nul
Grüße
bastla
Bitte warten ..
Mitglied: Biber
17.07.2007 um 22:18 Uhr
@bastla

Ja, aber....

Was das Zitat zum Feintuning betrifft -> keine Einwände.

Aber die im Skript verwendete Variable macht den Batch eher unflexibler als flexibler, was ja der Sinn von dieser Trennung in einmalig definierte Variablen und fest verdrahtete Texte im Code ist.

Vorschlag bzw. ein Schritt hin zur künftigen leichteren Universal-Verwendbarkeit:
01.
@echo off & setlocal 
02.
set Quelle="D:\SAP_DEL_4\Public\Checklisten\Aktuelle_Checklisten" 
03.
set QDat=DKS_Check_ 
04.
<b>set Ext=.xls</b> 
05.
set Ziel="D:\SAP_DEL_4\Public\Checklisten\changedate" 
06.
if not exist %Ziel% md %Ziel% 
07.
 
08.
set revday=%date% 
09.
set revtime=%time% 
10.
time 07:30 
11.
pushd %Ziel% 
12.
 
13.
for %%i in (<b>%Quelle%\%QDat%*%Ext%</b>) do call :ProcessFile "%%i" 
14.
 
15.
date %revday% 
16.
time %revtime% 
17.
popd 
18.
goto :eof 
19.
 
20.
:ProcessFile 
21.
echo %~1 
22.
set Datum=%~n1 
23.
set Datum=%Datum:~-10% 
24.
date %Datum% 
25.
copy /y %Quelle%\%QDat%%Datum%<b>%~x1</b>>nul 
26.
copy /b %QDat%%Datum%<b>%~x1</b>+,,>nul 
27.
goto :eof
Denn der geCALLte Block ":ProcessFile" sollte ja "Files" verarbeiten können... heißt ja nicht ":ProcessExt"...

Grüße
Biber
Bitte warten ..
Mitglied: Landstreicher
18.07.2007 um 11:38 Uhr
Moin Biber & bastla,

jetzt bin ich wie immer baff .... ihr wisst sachen ... ich bin entsetzt

aber eine kleine frage bleibt mir als noob offen. an welcher stelle setzt du wie das "geändert am" datum um ?

grüße der erstaunte landstreicher
Bitte warten ..
Mitglied: bastla
18.07.2007 um 12:02 Uhr
Hallo Landstreicher!

Wie oben erwähnt, kannst Du ein "copy" verwenden, um Datum und Uhrzeit auf den aktuellen Wert zu setzen:
01.
copy /b DKS_Check_%Day%.%Mon%.%year%.xls+,,>nul
Grüße
bastla
Bitte warten ..
Mitglied: Landstreicher
19.07.2007 um 16:31 Uhr
hi bastla,

kann mir jemand das ganze ab zeile " pushd %Ziel%" etwas näher erklären, was da genau passiert ?
will ja auch nen bissl dabei lernen *g*

mfg landstreicher
Bitte warten ..
Mitglied: bastla
19.07.2007 um 17:17 Uhr
Hallo Landsteicher!

Lerneifer unterstützen wir hier gerne.

:: In das Zielverzeichnis wechseln (Alternative: "cd /d %Ziel%") ...
pushd %Ziel%

:: Für alle im Quellverzeichnis vorhandenen Dateien, die dem Suchmuster %QDat%*%Ext%,
:: also: "DKS_Check_*.xls", entsprechen, das Unterprogramm "ProcessFile" aufrufen und
:: den Dateinamen als Parameter übergeben ...
for %%i in (%Quelle%\%QDat%*%Ext%) do call :ProcessFile "%%i"

:: Hier sind alle Dateien bearbeitet und daher können wir aufräumen:

:: Datum und Zeit auf die vorher zwischengespeicherten "wirklichen" Werte zurücksetzen,
:: wobei allerdings die 12,37 Sekunden Laufzeit des Batches nicht berücksichtigt werden.
date %revday%
time %revtime%

:: Beim "pushd" wurde das vorhergehende Verzeichnis zwischengespeichert; mit
:: "popd" kehren wir wieder dorthin zurück (was hier zwar egal wäre, da ohnehin
:: schon Ende, aber damit wird diese Rücksprungadresse vom Stack entfernt, daher:
:: pushd und popd immer paarweise verwenden).
popd

:: Beenden mit einem Sprung zur imaginären Marke "eof" (end of file);
:: dass eher "eob" angebracht wäre, interessiert eigentlich keinen ...
goto :eof

:: Hier beginnt das Unterprogramm "ProcessFile", das sich im Prinzip wie ein eigenständiger
:: Batch verhält und daher den übergebenen Dateinamen als Parameter %1 interpretiert.
:ProcessFile

:: Die Schreibweise "%~1" gibt %1 (also den übergebenen Dateinamen inkl. Pfad) ohne die
:: umschließenden Anführungszeichen aus.
echo %~1

:: In %1 steht ein Dateiname, daher kann der reine Namensbestandteil (ohne Extension) mit
:: "%~n1" extrahiert und in eine Variable gespeichert werden (siehe dazu die Hilfe zu "for").
set Datum=%~n1

:: Da in %Datum% jetzt noch der gesamte Dateiname steht, wir aber nur die letzten 10 Stellen
:: brauchen, nehmen wir eben diese und speichern gleich wieder unter dem Namen "Datum".
:: Näheres zur Zerlegung der Variablen findet sich in der Hilfe zu "set".
:: Eigentlich hätte oben der Variablenname "Dateiname" besser gepasst ...
set Datum=%Datum:~-10%

:: Systemdatum für die folgenden Aktionen auf den aus dem Dateinamen extrahierten Wert setzen
date %Datum%

:: Wir befinden uns seit dem "pushd" bereits im Zielverzeichnis, daher benötigt der
:: "copy"-Befehl keine Zielangabe. Das "/y" sorgt dafür, dass bei ev mehrmaligem Aufruf
:: des Batches die schon vorhandene Zieldatei kommentarlos überschrieben wird.
:: ">nul" entsorgt die (hier) uninteressante Meldung "1 Datei(en) kopiert".
:: Der Namensbestandteil "%~x1" gibt die Extension an und bedeutet: Behalte die beim Aufruf
:: übergebene Extension (nach der Dateimaske oben kann dies nur ".xls" sein) bei.
:: Da das Ganze ohnehin nur bei korrektem Namensformat funktioniert, hätte hier
:: sogar ein copy /y %1>nul gereicht ...
copy /y %Quelle%\%QDat%%Datum%%~x1>nul

:: Mit dieser Syntax wird die Datei in sich selbst kopiert, wobei allerdings "Nichts" angefügt
:: und damit die Datei für das System "verändert" wird - daher wird das Änderungsdatum neu
:: gesetzt - der eigentliche Grund für die ganze Aktion.
:: Gleiche Überlegung wie oben: auch ein copy /b %~nx1+, ,>nul müsste genügen ...
copy /b %QDat%%Datum%%~x1+, ,>nul

:: Dieses "goto :eof" steht hier nur der Ordnung halber, da ohnehin schon das Datei-(Batch-)
:: Ende folgt. In dieser Situation bedeutet es: 'Unterprogramm beendet, Rücksprung zum
:: Hauptprogramm (= in die "for"-Schleife, aus der es aufgerufen wurde)'
goto :eof

Grüße
bastla
Bitte warten ..
Mitglied: Biber
20.07.2007 um 00:43 Uhr
Moin Bastla,

ich möchte nicht, dass Dein voriger Kommentar im allgemeinen Forumsrauschen untergeht..
Allererste Sahne. Oder was auch immer in der heutigen IT-Welt die zeitgemäße Formulierung ist.

Danke!

@Landstreicher
Bitte sei so lieb und stelle Deinen Nick quasi als Ghostwriter zur Verfügung.
Wenn Du nun aber denken solltest:
"Hääh? ich hab doch nur eine dumme Noob-Frage gestellt und jezz bin ich Tutorial-Schreiber?!?"....
.............da kann ich Dich beruhigen: nur "gute" Fragen führen im Ergebnis zu solchen Beiträgen.

Also Danke an Euch beide
Biber
Bitte warten ..
Mitglied: bastla
20.07.2007 um 10:00 Uhr
@Biber

Dankeschön.
Lob aus Deiner Tastatur hat einen besonderen Stellenwert.

Oder was auch immer in der heutigen IT-Welt die zeitgemäße Formulierung ist.
Weiß ich auch nicht, bin doch von vorgestern ...

Grüße
bastla
Bitte warten ..
Ähnliche Inhalte
Batch & Shell
gelöst Dateinamen mit Batch-Datei ändern - Problem (9)

Frage von fffffuuuuuuuhhhh zum Thema Batch & Shell ...

Batch & Shell
gelöst Teile eines Dateinamens ändern mit Batch Datei (4)

Frage von fffffuuuuuuuhhhh zum Thema Batch & Shell ...

Batch & Shell
gelöst Registry per Batch abfragen und INI Einträge hinzufügen bzw. ändern (18)

Frage von kampen zum Thema Batch & Shell ...

Exchange Server
Exchange-UM Bindungen ändern (4)

Frage von Herbrich19 zum Thema Exchange Server ...

Neue Wissensbeiträge
Tipps & Tricks

Wie Hackt man sich am besten in ein Computernetzwerk ein

(29)

Erfahrungsbericht von Herbrich19 zum Thema Tipps & Tricks ...

Humor (lol)

Bester Vorschlag eines Supporttechnikers ever: APC

(15)

Erfahrungsbericht von DerWoWusste zum Thema Humor (lol) ...

Windows Server

Exchange 2010 Active Directory und Windows Server 2016

(4)

Erfahrungsbericht von Herbrich19 zum Thema Windows Server ...

Heiß diskutierte Inhalte
Internet
gelöst Mitarbeiter surft auf unerwünschter Seite - Wie damit umgehen? (44)

Frage von sabines zum Thema Internet ...

Netzwerke
Wie erstelle ich ein Intranet (19)

Frage von Leonardnet zum Thema Netzwerke ...

LAN, WAN, Wireless
gelöst Eintägige Netzwerkunterbrechung trotz Backupleitung (15)

Frage von iAmbricksta zum Thema LAN, WAN, Wireless ...

Windows Server
Server 2012 R2 - Zugriff Verweigert bei jeglicher Tätigkeit (13)

Frage von DarkLevi zum Thema Windows Server ...