3 Stimmen

Getrennte Datei nach Datum

Ich kann nicht herausfinden, wie ich die Dateien in Ordnern nach Datum trennen kann.

Ich habe 1.000.000 Dateien und alle Dateien in einem Ordner machen den Explorer krank :P also möchte ich sie nach Datum in verschiedene Ordner aufteilen:

01-09-11
02-09-11
03-09-11
usw.

1voto

PA. Punkte 26952

Das Extrahieren des Datums ist relativ einfach, siehe HELP CALL und versuchen Sie diese einfache BAT-Datei

@echo off
setlocal enabledelayedexpansion
FOR %%A IN (*.*) DO (
  set tf=%%~tA
  echo  %%~fA ... !tf! 
)

Über diesen Ansatz hinaus zu gehen und eine Lösung für Ihr Problem zu finden, scheint ziemlich einfach zu sein...

@echo off
setlocal enabledelayedexpansion
FOR %%A IN (*.*) DO (
  set tf=%%~tA
  set fd=!tf:~0,10!
  md !fd! 
  move /Y %%~fA !fd! 
)

aber warte, dieser Code wird nicht garantiert ausgeführt. Es gibt einige Abhängigkeiten vom Datumsformat, die die Ausführung dieses einfachen Codes verhindern können. Die Handhabung von Datumsangaben in der BAT-Datei ist nicht einfach, da das Datumsformat vom Gebietsschema und sogar von benutzerdefinierten Einstellungen abhängt. In diesem speziellen Stück wird es zu Problemen kommen, wenn das Datumstrennzeichen / oder wenn das Datumsformat zwei Ziffern für das Jahr anstelle von vier Ziffern verwendet, wodurch das Datum nur 8 statt 10 Stellen füllt... Die Variationen des Formats und damit die möglichen Fehler in diesem Code sind endlos.

Eine mögliche Lösung besteht darin, das Datumsformat vorübergehend auf ein bekanntes Format zu ändern. Fügen Sie den folgenden Code vor der Schleife ein

....
reg copy "HKCU\Control Panel\International" "HKCU\Control Panel\International-Temp" /f >nul
reg add "HKCU\Control Panel\International" /v sShortDate /d "yyyy-MM-dd" /f >nul
reg add "HKCU\Control Panel\International" /v sTimeFormat /d "HH:mm:ss" /f >nul
...

und dann, nach der Schleife, zurück zum Original.

...
reg copy "HKCU\Control Panel\International-Temp" "HKCU\Control Panel\International" /f >nul
...

0voto

Anthony Miller Punkte 13880

Nachfolgend finden Sie ein Batch-Programm, mit dem Sie ein Vergleichsdatum im Format mm tt jjjj angeben können. Sie können dann "am und vor" oder "am und nach" dem Datum und dem Zielordner angeben. Das Skript erstellt den Ordner auch dann, wenn er noch nicht existiert, und verschiebt dann die Dateien.

@ECHO OFF
ECHO Please ensure you are running this batch file from the directory where the files reside. If not, please press CTRL+C to cancel this script and move it to the correct location, then run it again.
PAUSE
SET BorA=none
ECHO Please enter the full path of where you wish your files to be moved to. Example would be C:\Documents and Settings\mechaflash\Desktop\move_folder. Please do not include a trailing \.
SET /p _path=" "

:_date
SET _correct=none
SET /p mm="Two digit month. E.G. 10 = October  "
SET /p dd="Two digit day. E.G. 10 = Day 10  "
SET /p yyyy="4 digit year. E.G. 2010 = Year 2010  "
ECHO Is the date %mm%/%dd%/%yyyy% correct? [1] Yes or [2] No?
SET /p _correct=" "
IF %_correct% EQU 1 GOTO:BorA
IF %_correct% EQU 2 (GOTO:_date) ELSE (ECHO Sorry, you entered an invalid option. & GOTO:_date)
IF "%_correct%"=="none" ECHO Sorry, you entered an invalid option. & GOTO:_date

:BorA
ECHO Would you like to select all files on and before [1], or on and after [2] your entered date of %mm%/%dd%/%yyyy% ?
SET /p BorA=" "
IF %BorA% EQU 1 SET _oper=LEQ
IF %BorA% EQU 2 (SET _oper=GEQ) ELSE (Echo Sorry, you entered an invalid option.  & GOTO:BorA)
IF "%BorA%"=="none" ECHO Sorry, you entered an invalid option. & GOTO:BorA
SET _date=%yyyy%%mm%%dd%
IF NOT EXIST %_path%\NUL MKDIR %_path%

SETLOCAL ENABLEDELAYEDEXPANSION
FOR %%A IN (*.*) DO (
 SET var=%%~tA
 SET var2=!var:~0,-9!
 FOR /F "USEBACKQ tokens=1-3 delims=/" %%F IN (`ECHO !var2!`) DO (
  IF %%H%%F%%G %BorA% %_date% MOVE /Y "%%A" "%_path%\~nxA"
 )
)

Wenn Sie var auf %%~tA setzen, erhalten Sie das Datum und die Uhrzeit der Dateien. Wenn Sie var2 auf !var:~0,-9! setzen, wird die Uhrzeit entfernt und es bleibt nur das Datum übrig. Die folgende FOR-Schleife entfernt die / aus dem Datum und ordnet es in das Format yyyymmdd um, so dass es Datumsangaben mit Operanden richtig vergleichen kann.

Wenn Sie also alles andere weglassen wollen, können Sie einfach das Folgende nehmen:

SETLOCAL ENABLEDELAYEDEXPANSION
FOR %%A IN (*.*) DO (
 SET var=%%~tA
 SET var2=!var:~0,-9!
 FOR /F "USEBACKQ tokens=1-3 delims=/" %%F IN (`ECHO !var2!`) DO (
  IF %%H%%F%%G %BorA% %_date% MOVE /Y "%%A" "%_path%\~nxA"
 )
)

Und machen Sie einige Änderungen daran.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X