hmm, immer noch derselbe Fehler...
edit:
in
$sStartFolder="E:\Daten\"
ist Daten vorhanden. Muss in der Zeile
Local $aProject = StringRegExp($sStartFolder, "(?i)\\Daten\\(.*?)\\Dokument-Explorer\\", 1)
dann nochmal Daten sein?
hmm, immer noch derselbe Fehler...
edit:
in
$sStartFolder="E:\Daten\"
ist Daten vorhanden. Muss in der Zeile
Local $aProject = StringRegExp($sStartFolder, "(?i)\\Daten\\(.*?)\\Dokument-Explorer\\", 1)
dann nochmal Daten sein?
ja, hast du richtig erfasst.
Ist kompliziert nicht wahr?
Bisher wurde so jahrelang agiert. Und das mit copy/paste. Dabei sind hin und wieder auch mal Daten verschütt gegangen, weil man mit dem Start und Ziel mal durcheinander kam.
Und erst über die bat und jetzt als grafisch ansprechende Oberfläche soll es einfacher und sicherer werden.
Hier mal der Ablauf in Bildern:
Ausschnitt 1: Auswahl der zu kopierenden Verzeichnisse
Ausschnitt 2: Startpfad (Unterordner Berechnungen der ausgewählten Projekte)
Ausschnitt 3: Zielpfad (Berechnungen wird in einen Pfad kopiert mit Jahrgang/Projekt
Vielleicht macht es das klarer:
https://picload.org/view/rwacpopw/kayes.jpg.html
und Entschuldigung, wenn ich mich nicht klar verständlich gemacht habe und dir dadurch Mehrarbeit entstanden ist....
#sorry
In der bat oben habe ich immer das Project eingegeben, dann abgefragt ob ein neues kopiert werden soll usw...
In der GUI soll nun eine List angezeigt werden in der ich mehrere Projekte auswähle und die dann in die richtigen Ordner kopiert werden.
Ja, aber wie baue ich
@echo off
CLS
:PANASONIC
Color E
ECHO.
ECHO UEBERTRAGUNG PANASONIC AUF PC
ECHO.
REM set /P jjjj= Jahrgang (xxxx)?
set /P projekt= Projekt (xxDxxx)?
set jjjj=20%projekt:~0,2%
ECHO.
xcopy "E:\Daten\20%projekt%\Dokument-Explorer\Berechnungen\*" "F:\Dokumente\Aussendienst\%jjjj%\%projekt%\Berechnungen\"
ECHO.
ECHO Datenuebertragung beendet
ECHO.
set /P x= (1) weiteres Projekt oder oder (2) Ende?
if /I "%x%"=="1" goto PANASONIC
if /I "%x%"=="2" goto ende
echo Fehler: [%w%]
goto ende
:ende
Alles anzeigen
so um das ich es in
#include <File.au3>
#include <ListViewConstants.au3>
#include <GuiListView.au3>
#include <WindowsConstants.au3>
#include <GUIConstantsEx.au3>
Global $iWidth=800,$iHeight=900,$sStartFolder="E:\Daten\",$sTargetFolder="F:\Dokumente\Aussendienst\",$arFileListViewItems[0]
$hGui=GUICreate("Datensicherung von PANASONIC auf SERVER",$iWidth,$iHeight)
$iStartFolderLabel=GUICtrlCreateLabel("Startordner: ",5,7,55,20)
$iStartFolderInput=GUICtrlCreateInput($sStartFolder,65,5,$iWidth-100-40,20)
GUICtrlSetState(-1,$GUI_DISABLE)
$iStartFolderButton=GUICtrlCreateButton("...",$iWidth-70,2,30,25)
GUICtrlSetState(-1,$GUI_DISABLE)
$iTargetFolderLabel=GUICtrlCreateLabel("Zielordner: ",5,$iHeight-22-30,55,20)
$iTargetFolderInput=GUICtrlCreateInput($sTargetFolder,65,$iHeight-25-30,$iWidth-65-40,20)
GUICtrlSetState(-1,$GUI_DISABLE)
$iStartFolderGo=GUICtrlCreateButton("List",$iWidth-35,2,30,25)
$iFileListView=GUICtrlCreateListView("File",5,30,$iWidth-10,$iHeight-30-85,-1,BitOR($LVS_EX_CHECKBOXES,$LVS_EX_FULLROWSELECT,$WS_EX_CLIENTEDGE))
_GUICtrlListView_SetColumnWidth($iFileListView,0,$iWidth-35)
$iTargetFolderButton=GUICtrlCreateButton("...",$iWidth-35,$iHeight-27-30,30,25)
GUICtrlSetState(-1,$GUI_DISABLE)
$iCopyProgress=GUICtrlCreateProgress(5,$iHeight-25,$iWidth-165,20)
$iCopyStartButton=GUICtrlCreateButton("Start",$iWidth-155,$iHeight-25,75,20)
$iCopyStopButton=GUICtrlCreateButton("Stop",$iWidth-80,$iHeight-25,75,20)
;$iDelButton=GUICtrlCreateButton("Löschen",$iWidth-155,$iHeight-25,75,20)
GUICtrlSetState($iCopyStopButton,$GUI_DISABLE)
GUISetState()
_ListFiles(GUICtrlRead($iStartFolderInput))
While 1
$iMsg=GUIGetMsg()
Switch $iMsg
case -3
exit
case $iStartFolderButton
$sFolder=FileSelectFolder("Wähle Start Ordner","",0,$sStartFolder,$hGui)
If $sFolder<>"" Then GUICtrlSetData($iStartFolderInput,$sFolder)
_ListFiles(GUICtrlRead($iStartFolderInput))
case $iStartFolderGo
_ListFiles(GUICtrlRead($iStartFolderInput))
case $iCopyStartButton
_MoveDir()
case $iTargetFolderButton
$sFolder=FileSelectFolder("Wähle Ziel Ordner","",0,$sTargetFolder,$hGui)
If $sFolder<>"" Then GUICtrlSetData($iTargetFolderInput,$sFolder)
EndSwitch
WEnd
Func _ListFiles($sPath)
_GUICtrlListView_DeleteAllItems($iFileListView)
local $arFiles=_FileListToArray($sPath,"*",$FLTA_FOLDERS,true)
ReDim $arFileListViewItems[UBound($arFiles)-1]
for $i=1 to UBound($arFiles)-1 step 1
$arFileListViewItems[$i-1]=GUICtrlCreateListViewItem($arFiles[$i],$iFileListView)
next
EndFunc
Func _MoveDir()
;GUICtrlSetState($iStartFolderInput,$GUI_DISABLE)
;GUICtrlSetState($iStartFolderButton,$GUI_DISABLE)
GUICtrlSetState($iStartFolderGo,$GUI_DISABLE)
;GUICtrlSetState($iTargetFolderInput,$GUI_DISABLE)
;GUICtrlSetState($iTargetFolderButton,$GUI_DISABLE)
GUICtrlSetState($iCopyStartButton,$GUI_DISABLE)
GUICtrlSetState($iCopyStopButton,$GUI_ENABLE)
;GUICtrlSetState($iDelButton,$GUI_ENABLE)
local $arMoveDir[_GUICtrlListView_GetItemCount($iFileListView)][2],$iCount=0
for $i=0 to _GUICtrlListView_GetItemCount($iFileListView)-1 step 1
If _GUICtrlListView_GetItemChecked($iFileListView,$i) Then
$arMoveDir[$iCount][0]=_GUICtrlListView_GetItemText($iFileListView,$i,0)
$arMoveDir[$iCount][1]=$i
$iCount+=1
Else
GUICtrlSetBkColor($arFileListViewItems[$i],0xFFFF00)
EndIf
next
ReDim $arMoveDir[$iCount][2]
GUICtrlSetData($iCopyProgress,0)
local $iTargetFolder=GUICtrlRead($iTargetFolderInput)
local $iPercent=0
for $i=0 to UBound($arMoveDir)-1 step 1
If Int($i/UBound($arMoveDir)*100)<>$iPercent Then
$iPercent=Int($i/UBound($arMoveDir)*100)
GUICtrlSetData($iCopyProgress,$iPercent)
EndIf
local $arFile=StringSplit($arMoveDir[$i][0],"\",1+2)
local $sFilename=$arFile[UBound($arFile)-1]
If DirCopy($arMoveDir[$i][0],$iTargetFolder&"\"&$sFilename,BitOR(1,8)) Then
GUICtrlSetBkColor($arFileListViewItems[$arMoveDir[$i][1]],0x00FF00)
Else
GUICtrlSetBkColor($arFileListViewItems[$arMoveDir[$i][1]],0xFF0000)
EndIf
Switch GUIGetMsg()
case -3
exit
case $iCopyStopButton
ExitLoop
EndSwitch
next
GUICtrlSetData($iCopyProgress,100)
;GUICtrlSetState($iStartFolderInput,$GUI_ENABLE)
;GUICtrlSetState($iStartFolderButton,$GUI_ENABLE)
GUICtrlSetState($iStartFolderGo,$GUI_ENABLE)
;GUICtrlSetState($iTargetFolderInput,$GUI_ENABLE)
;GUICtrlSetState($iTargetFolderButton,$GUI_ENABLE)
GUICtrlSetState($iCopyStartButton,$GUI_ENABLE)
GUICtrlSetState($iCopyStopButton,$GUI_DISABLE)
EndFunc
Alles anzeigen
funktioniert?
So, das kopieren der Ordner funktioniert nun.
Kann man diesen Kopierbefehl noch weiter parametrieren?
Der Befehl aus der bat lautete:
xcopy "\\ABKADPC\Daten\20%projekt%\Dokument-Explorer\Berechnungen\*" "F:\Daten\Dokumente\Aussendienst\%jjjj%\%projekt%\Berechnungen\"
Der Ablauf ist folgender:
Morgens nutze ich unsere Büroorganisationssoftware um komplette Aufträge zu exportieren.
Unter einem Pfad wird nun der Auftrag als Ordner 2017D123 mit dem Unterordner Dokument-Explorer und den darin enthaltenen Unterordnern Berechnungen, Fotos, Unterlagen, Rechnungen, Anträge, Verträge kopiert.
Ich erfasse den ganzen Tag über Daten in dem Ordner Berechnungen.
Diesen Ordner importiert unsere Software aber nicht. Bisher haben wir das über copy/paste gelöst bis ich die oben erwähnte bat zur Verfügung hatte.
Damit wir nicht aus Versehen Daten abends überschreiben, kopieren wir diese Daten in einen Ordner Aussendienst/2017/17d123/Berechnungen
Dann werden die Orginal Daten geöffnet und die Aussendienst Daten importiert.
Frage ist nun: Wie passe ich hier das Script an damit ich die gewählten Daten in den richtigen Ordner kopiere?
Der copyDir Befehl hat nur einige wenige Parameter zur Verfügung. Das Einsortieren in den richtigen Ordner wird schwieriger da wir auch ältere Jahrgänge mit im Boot haben.
Soweit ich verstanden habe könnte ich den xcopy Befehl auch in AutoIt nutzen, aber wie werden hier die Parameter angepasst für AutoIt?
So, habe jetzt auch mal die Gelegenheit mich intensiver mit dem Script zu beschäftigen.
Austausch von
in
hat schon einmal bewirkt das jetzt die Ordner wie gewollt angezeigt werden.
Nur mit dem kopieren habe ich jetzt so meine Schwierigkeiten.
Aus moveFiles muss jetzt irgendwie DirCopy werden.
Ah, der Fehler taucht auf, weil ich ganze Ordner kopieren will und nicht einzelne Files.
Im Startordner ist keine einfache Datei vorhanden und dann kommt der Fehler. Sobald eine einzelne Datei im Startordner vorhanden ist funktioniert auch das Script
Wenn ich die Pfade Start und Ziel fest eingebe erscheint die Meldung:
In Line 48
Danke Kanashius,
ich habe das Script so eingetragen und als Test laufen lassen. Fazit: Super! Nur eine Sache hätte ich da noch:
Ich hätte gerne einen festen Start- und einen festen Zielordner.
Diese Anpassung wirft einen Fehler in Zeile 46 auf
Error: Variable subscript badly formatted
Weisst du die Ursache?
Hallo Leute,
ich habe mir eine kleine bat Datei geschrieben die mir im alltäglichen Leben Kopierarbeit abnimmt.
Auf meinen Aussendienstrechner nehme ich Projekte mit, die ich im Laufe des Tages bearbeite. Einige bleiben eine längere Zeit auf dem AD Rechner damit ich im Notfall die Daten dabei habe.
Abends müssen dann die bearbeiteten Projekte auf den Server übertragen werden, damit die Leute im Innendienst sie weiter bearbeiten können.
Diesen Vorgang möchte ich nun in einer grafisch ansprechenderen Variante haben. Könnt ihr mir dabei helfen?
Der Ablauf ist folgender:
- Programmstart
- das Programm durchsucht einen Standardpfad und es werden die enthaltenen Projekte angezeigt, mit einer Checkbox davor.
Beispiel (Das O symbolisiert die Checkbox zum anhaken)
O 15D133
O 15D336
O 16D656
O 17d466
.
.
.
.
O alle Projekte
Schaltfläche kopieren Schaltfläche Beenden
Ich sehe also die vorhandenen Projekte und kann einzelne oder auch alle anwählen.
kopieren startet den Vorgang, Beenden beendet das Programm
wählt man kopieren läuft der Vorgang. Nach Fertigstellung erscheint die Mitteilung Beendet und mit der Schaltfläche OK beendet man das Programm.
Wie schaut das aus? Ist das machbar und traut sich jemand da ran? ![]()