Dateien in Ordner mit derem Datum kopieren/verschieben

German support forum

Moderators: Hacker, Stefan2, white

Post Reply
traveller
Junior Member
Junior Member
Posts: 6
Joined: 2009-12-03, 08:21 UTC

Dateien in Ordner mit derem Datum kopieren/verschieben

Post by *traveller »

Hallo!

Ich habe mit der Suchfunktion leider nichts passendes gefunden.

Meine Frage:
Gibt es die Möglichkeit, Dateien in einen Ordner zu kopieren/verschieben, wobei der Zielordner automatisch das Datum der Datei erhält?

Der Ordnername sollte nach dem Schema
yyyy_mm_dd
lauten (z.B. 2009_12_03)
Vielen Dank!
Traveller
User avatar
ghisler(Author)
Site Admin
Site Admin
Posts: 50679
Joined: 2003-02-04, 09:46 UTC
Location: Switzerland
Contact:

Post by *ghisler(Author) »

Nein, jedenfalls nicht mit Total Commander, sorry.
Author of Total Commander
https://www.ghisler.com
User avatar
HolgerK
Power Member
Power Member
Posts: 5411
Joined: 2006-01-26, 22:15 UTC
Location: Europe, Aachen

Post by *HolgerK »

2traveller

Ich habe mal ein bisschen Code-Recycling betrieben MoveFiles2SubFolders :wink:

1) Den fogenden Code-Block markieren und als MoveFiles2SubFolders(filedate).vbs abspeichern.

Code: Select all

'Command   : MoveFiles2SubFolders(filedate).vbs
'Parameters: "%L" -1
'Tooltip   : move all marked files into subfolder with the file's date "yyyy_mm_dd" 
' # first parameter %L Name of a list file with long file names including the complete path
' #  (opt) second parameter (silent mode) if set to 0. all expected error messages are skipped

'________________
' http://classicasp.aspfaq.com/date-time-routines-manipulation/can-i-make-vbscript-format-dates-for-me.html
Function Format(vExpression, sFormat) 
 
        set fmt = CreateObject("MSSTDFMT.StdDataFormat") 
        fmt.Format = sFormat 
 
        set rs = CreateObject("ADODB.Recordset") 
        rs.Fields.Append "fldExpression", 12 ' adVariant 
 
        rs.Open 
        rs.AddNew 
 
        set rs("fldExpression").DataFormat = fmt 
        rs("fldExpression").Value = vExpression 
 
        Format = rs("fldExpression").Value 
 
        rs.close: Set rs = Nothing: Set fmt = Nothing 
 
End Function 
    ' sample usage: 
 
    'response.write format(now(), "yyyy-mm-dd") 
    'response.write "<br>" 
    'response.write format(time(), "hh:mm") 
'________________


Const FOR_READING = 1

sFileList = WScript.arguments.Item( 0 )
bSilent = false
If WScript.arguments.Count > 1 Then   If WScript.arguments.Item( 1 ) = 0 Then bSilent = true

Set oFSO = CreateObject( "Scripting.FileSystemObject" )

If  oFSO.FileExists(sFileList) Then

  Set oTextStream = oFSO.OpenTextFile( sFileList, FOR_READING )
  Do Until oTextStream.AtEndOfStream

   sFilePathName = oTextStream.ReadLine
   If  oFSO.FileExists( sFilePathName ) Then
   
      sPath = oFSO.GetParentFolderName( sFilePathName )
      sName = oFSO.GetBaseName( sFilePathName )
      sExtension = oFSO.GetExtensionName( sFilePathName )
      Set f = oFSO.GetFile(sFilePathName)
      sDate = format(f.DateLastModified, "yyyy_mm_dd")
      sNewPath = sPath & "\" & sDate
      sNewFilePathName = sNewPath & "\" & sName & "." & sExtension

      If Not oFSO.FolderExists( sNewPath ) Then
        oFSO.CreateFolder( sNewPath )
      End If

      If Not oFSO.FileExists( sNewFilePathName ) Then
        oFSO.MoveFile  sFilePathName, sNewFilePathName
      ElseIf not bSilent then
        WScript.Echo "Destination File exists (skipped)!: " & sNewFilePathName
      End If

    End If

  Loop
 
  oTextStream.Close
 
Else

  WScript.Echo "Input file list " & sFileList & " not found."
 
End If
2) die Datei MoveFiles2SubFolders(filedate).vbs auf die Buttonleiste ziehen

3) Kontextmenu "Ändern" des neuen Buttons auswählen, und unter Parameter:
"%L"
eintragen.

4) Dateien markieren und dann den Button betätigen.


Bei Bedarf die Zeile
Date = format(f.DateLastModified, "yyyy_mm_dd")
anpassen, um eine anderes Datumsformat oder z.B. DateCreated zu erhalten.

HTH
Holger
traveller
Junior Member
Junior Member
Posts: 6
Joined: 2009-12-03, 08:21 UTC

Post by *traveller »

Hallo Holger!

Da ich sehr ungeduldig bin/war hatte ich im Forum
admin.de auch die Frage gestellt.

Dort gab mir jemand diese Batch Dateien:

1. builder.bat

Code: Select all

@Echo off
for %%a in (*) do (
	Echo.
	Echo Verarbeite Datei %%a
	Echo.
	Echo ________________________________
	Echo.
	call worker.bat "%%a"
)
2. worker.bat

Code: Select all

@Echo off
set file=%1
set fdate=%~t1
set fday=%fdate:~0,2%
set fmonth=%fdate:~3,2%
set fyear=%fdate:~6,4%
set folname=%fyear%_%fmonth%_%fday%
:work
if exist %folname%\NUL (
	Echo Verschiebe Datei %file% nach %folname%
	Echo ----
	move %file% "%folname%\"%file% 
) else (
	Echo Erstelle Verzeichnis %folname%
	Echo ----
	md "%folname%"
	goto work
)
Alle Dateien, die man nach dem Muster
yyyy_mm_dd
sortieren möchte in ein Verzeichnis kopieren/verschieben.
Dorthin auch die beiden Batch Dateien KOPIEREN!
die builder.bat ausführen und schon ist in sekundenschnelle alles sortiert.
Über 500 Bilder waren bei mir in weniger als 5 Sekunden sortiert.

Wie das Verzeichnis aussehen soll kann man in der worker.bat in der Zeile
set folname=%fyear%_%fmonth%_%fday%
anpassen.

Trotzdem vielen Dank für die Hilfe!




@ghisler(Author)

Eigentlich schade.
Es gibt doch mit Strg+M das Mehrfach-Umbenenn-Tool.
Und dort kann ich unter
Plugin/tc
auch einen Pfad eingeben oder den Dateinamen nach der Erstellzeit der Datei bestimmen.
Läßt sich programmiertechnisch nicht das von mir gewünschte Ziel einbauen?
Vielen Dank!
Traveller
tumasch
Junior Member
Junior Member
Posts: 19
Joined: 2008-04-18, 07:40 UTC

Post by *tumasch »

Muss gestehen dass es wirklich praktisch wäre, wenn man per MultiUmbenennen auch verschieben könnte (mit der Eingabe eines \ in das Umbenenne-zu-Fenster) ... durfte gerade 8000 Bilder einer Webcam sortieren, war kein Spass so.

Und wenn ich gerade dabei bin: Wenn man . durch Leerschlag ersetzt, dann geht auch der Punkt vor der Dateiendung flöten. Das ist schade.
User avatar
HolgerK
Power Member
Power Member
Posts: 5411
Joined: 2006-01-26, 22:15 UTC
Location: Europe, Aachen

Post by *HolgerK »

wenn man per MultiUmbenennen auch verschieben könnte
Relatives(gleiches Laufwerk) Verschieben in existierende Verzeichnisse geht mit einem Trick: siehe http://ghisler.ch/board/viewtopic.php?p=146655#146655

Umbenennen von Punkt nach Leerzeichen geht z.B. mittels
Name: [N]
Erweiterung: #[E]
Suchen nach: .|_#
Ersetzen durch: _|.
_ im obigen Beispiel durch <Leerzeichen> ersetzen.

Aber ich stimme zu, es wäre intuitiver wenn man beim Suche und Ersetzen im MUT eine Checkbox "[x] nur Name" hätte.

HTH
Holger
Post Reply