delobo
Goto Top

Suche eine Batch,Tool oder Programm zum umbenennen von Dateien

Hallo Gemeinde

Ich habe folgendes Problem

Von meinem Brother Drucker Scanner Kommen die Daten in einen Ordner ( C:\Users\xxxxx\Desktop\Scanner )da liegen sie mit dem namen 01.12.2013.0001.pdf nun binde ich die Datei in ein Programm ein das Programm löscht die Datei dann im Scanner Ordner und legt die Datei in einer Datenbank ab das soll es auch das ist alles auch gut so nun das Problem.
Die nächste PDF die ich ein scanne heißt leider auch wieder 01.12.2013.001.pdf und damit erkennt mein Programm die Datei nicht an und legt sie nicht in der Datenbank ab weil der Name schon vorhanden ist.
Nun meine frage gibt es eine Batch,Tool oder Programm was meinen Ordner ( C:\Users\xxxxx\Desktop\Scanner ) überwacht und wenn die PDF 01.12.2013.001.pdf rein kommt sie automatisch umbenennt in 01.12.2013.12.32.44.pdf ( Datum.Uhrzeit mit sec.pdf) ?

MFG

Delobo

Content-Key: 223392

Url: https://administrator.de/contentid/223392

Ausgedruckt am: 28.03.2024 um 11:03 Uhr

Mitglied: MrNetman
MrNetman 01.12.2013 um 13:25:49 Uhr
Goto Top
mit batch geht das.
Du kannst aber auch ein einfaches Tools nehmen: Ant renamer http://www.chip.de/downloads/Ant-Renamer_18204061.html
Viele Dinge gehen damit einfacher

Gruß
Netman
Mitglied: loonydeluxe
loonydeluxe 01.12.2013 aktualisiert um 13:32:58 Uhr
Goto Top
Hi,

falls du etwas Programmierkenntnisse hast, kannst du mit VB.NET Express oder C# Express die FilesystemWatcher-Komponente benutzen und mit den Funktionen aus System.File die Datei umbenennen.

Alternativ kannst du dir einen Task anlegen, der alle 1 Minute wiederholt wird. Dieser sollte dann eine Batch-Datei aufrufen, welche mit ForFiles für jede Datei einen Befehl ausführt. Dann bei ForFiles als Befehl "ren @ path "@fname.%uhrzeit%.@ext".
Für %uhrzeit% musst du vorher "nur noch" den aktuelle Zeitstempel - bereinigt um Sonderzeichen wie z. B. ":" - einsetzen. Das kannst du am Anfang der Batch-Datei per set-Befehl setzen.

Informationen zur Verwendung von ForFiles gibts hier: http://ss64.com/nt/forfiles.html

Grüße, loonydeluxe
Mitglied: Endoro
Endoro 01.12.2013 um 13:58:36 Uhr
Goto Top
Hey, Vorschlag für ein System mit deutschen Formaten:
@ECHO OFF &SETLOCAL
cd /d "%userprofile%\Desktop\Scanner"  
:loop
rem 10 Sekunden warten
ping -n 10 localhost >nul
rem wenn  01.12.2013.0001.pdf nicht vorhanden, zurück
if not exist "%date%.0001.pdf" goto:loop  
rem ansonsten umbenennen, sec100 entfernen
set "MyTime=%time:~0,8%"  
rem vorm umbenennen ":" in "." umwandeln  
ren "%date%.0001.pdf" "%date%.%MyTime::=.%.pdf"  
rem und von vorn
goto:loop
lg.
Mitglied: colinardo
colinardo 01.12.2013, aktualisiert am 17.03.2014 um 15:12:34 Uhr
Goto Top
Hallo Delobo,
hierzu kannst du folgendes VB-Script nutzen, welches einmal gestartet, im Hintergrund den entsprechenden Ordner dauerhaft überwacht und in einem bestimmten Intervall das du in Zeile 4 angibst die entsprechende Datei umbenennt. Den zu überwachenden lokalen Pfad gibst du in Zeile 2 an (ohne Backslash am Ende)
'Pfad der zu überwachen ist  
Const strPath = "C:\temp\source"  
'Überwachungs-Interval in Sekunden  
Const intInterval = "5"  
'------------------------------  
strDrive = Split(strPath,"\")(0)  
strFolder = Replace(Split(strPath,":")(1),"\","\\") & "\\"  

Set fso = WScript.CreateObject("Scripting.Filesystemobject")  
Set objShell = CreateObject("Wscript.Shell")  
Set objWMIService = GetObject( "winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2" )  

strQuery = "Select * From __InstanceOperationEvent" _  
    & " Within " & intInterval _  
    & " Where Targetinstance Isa 'CIM_DataFile'" _  
    & " And TargetInstance.Drive='" & strDrive & "'"_  
    & " And TargetInstance.Path='" & strFolder & "'"  

Set colEvents = objWMIService.ExecNotificationQuery (strQuery) 

Do 
    Set objEvent = colEvents.NextEvent()
    Set objTargetInst = objEvent.TargetInstance
    
    Select Case objEvent.Path_.Class 
        Case "__InstanceCreationEvent"   
            filename = objTargetInst.Name 
            If LCase(Right(filename,7)) = "001.pdf" Then  
				datum = Replace(Replace(Now(),":",".")," ",".")  
				newFileName = datum & ".pdf"  
				Set f = fso.GetFile(filename)
				f.Name = newFileName
			End If 
    End Select 

Loop
Zur Info: Das Script gibt keinerlei Ausgaben aus, wenn es gestartet wird, d.h. es läuft direkt im Hintergrund und Überwacht den Ordner kontinuierlich. Du erkennst das Script im Taskmanger als Task mit dem Prozessnamen wscript.exe, oder wenn es via cscript aufgerufen wurde mit cscript.exe.
Zu Beachten: Das Script benennt nur neu hinzukommende Dateien um, die seit dem Start des Scriptes hinzugekommen sind.

Grüße Uwe
back-to-topÄquivalentes Script in Powershell
<#
    Monitors folder for new files and renames specific files
#>
# Variables -------------------------
# local folder path to monitor
    $localFolderPath = "C:\Temp\source"   
# interval to check for changes
    $intMonitorInterval = 2
# file pattern in folder to monitor
    $strFilePattern = "%001.pdf"  
# -----------------------------------

# get seperate drive and path for wql query specific formatting
$strDrive = $localFolderPath.Split("\")  
$localFolderPath.TrimEnd("\")  
$strPath = $localFolderPath.Split(":")[1].Replace("\","\\")+"\\"  

# action fired when event occurs
$eventaction = {
    #object which fired the event
    $obj = $Event.SourceEventArgs.NewEvent.TargetInstance
    
    #create reference to a wmi-Object to get access to a function which converts wmi-datetime-strings to .net DateTime-Object
    $objWMI = (gwmi -Class "Win32_Process")  
    $fileModifiedDate = $objWMI.ConvertToDateTime($obj.LastModified)
    #new filename
    $newName = "$(get-date $fileModifiedDate -Format 'dd.MM.yyyy HH.mm.ss').pdf"  
    #rename the file
    Rename-Item -Path $obj.Name -NewName $newName
    #write some info to the console
    write-host "Neue Datei im Ordner: '"$obj.Name"' wurde umbenannt in '"$newname"'"  
}

# WQL Query which monitors a folder every x seconds for a new file appearing with a specific filename
$query = "Select * From __InstanceCreationEvent WITHIN $intMonitorInterval`  
          where TargetInstance ISA 'CIM_DataFile'`  
          and TargetInstance.Drive = '$strDrive'`  
          and TargetInstance.Path = '$strPath'`  
          and TargetInstance.Name like '$strFilePattern'"  

#actually register Event-Subscriber
Register-WmiEvent -query $query -SourceIdentifier "Monitor Folder Watcher" -action $eventaction  

# to end monitoring the event, call
# Unregister-Event -SourceIdentifier "Monitor Folder Watcher"  
Mitglied: rubberman
rubberman 01.12.2013 aktualisiert um 14:27:18 Uhr
Goto Top
Hallo colinardo,

fast genauso hatte ich es eben auch zusammen geschrotet. Du warst schneller face-wink

Option Explicit

Const Path = "%userprofile%\Desktop\Scanner"  
Const FindLike = "%.001.pdf"  
Const Interval = 1

Dim objWSH, objFSO, objWMI, objEvent, colEvents
Dim strPath, strDrive, strFolder, strFoundFullName, strFoundCreationDate, _
  strYear, strMonth, strDay, strHour, strMinute, strSecond, strNewFullName

Set objWSH = CreateObject("WScript.Shell")  
Set objFSO = CreateObject("Scripting.FileSystemObject")  
objWSH.CurrentDirectory = objFSO.GetParentFolderName(WScript.ScriptFullName)
strPath = objWSH.ExpandEnvironmentStrings(Path)
strPath = objFSO.GetAbsolutePathName(strPath)
If Not objFSO.FolderExists(strPath) Then
  MsgBox "Verzeichnis existiert nicht."  
  WScript.Quit
End If
strDrive = objFSO.GetDriveName(strPath)
strFolder = Replace(Mid(strPath, 3) & "\", "\", "\\", 1, -1, vbTextCompare)  

Set objWMI = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")  
Set colEvents = objWMI.ExecNotificationQuery( _
  "SELECT * FROM __InstanceCreationEvent" _  
  & " WITHIN " & CStr(Interval) _  
  & " WHERE Targetinstance ISA 'CIM_DataFile'" _  
  & " AND TargetInstance.Drive='" & strDrive & "'" _  
  & " AND TargetInstance.Path='" & strFolder & "'" _  
  & " AND TargetInstance.Name LIKE '" & FindLike & "'")  

Do
  Set objEvent = colEvents.NextEvent()
  strFoundFullName = objEvent.TargetInstance.Name
  strFoundCreationDate = objEvent.TargetInstance.CreationDate
  strYear = Mid(strFoundCreationDate, 1, 4)
  strMonth = Mid(strFoundCreationDate, 5, 2)
  strDay = Mid(strFoundCreationDate, 7, 2)
  strHour = Mid(strFoundCreationDate, 9, 2)
  strMinute = Mid(strFoundCreationDate, 11, 2)
  strSecond = Mid(strFoundCreationDate, 13, 2)
  strNewFullName = objFSO.BuildPath(objFSO.GetParentFolderName(strFoundFullName), _
    strDay & "." & strMonth & "." & strYear & "." & strHour & "." & strMinute & "." & strSecond & ".pdf")  
  objFSO.MoveFile strFoundFullName, strNewFullName
Loop

Grüße
rubberman