Avatar billede ulricho Juniormester
05. marts 2004 - 06:54 Der er 9 kommentarer og
1 løsning

for /r %I in, etc

Jeg er interesseret i at eksekvere en kommando i et givet bibliotek på alle de filer, som har ændret sig siden i går kl. 6:00. Hvorfor set batch-kommandoen ud fra DOS?

for /r %I in (G:\*) do if not "%~tI" > "08:00" kommando "%I" ???

Er der nogen, der kan hjælpe?
Avatar billede knudemand Nybegynder
06. marts 2004 - 12:53 #1
kort og godt: det kan ikke lade sig gøre !
men det er muligt du kan opnå det du ønsker, ved at bruge en anden tilgang til tingene, -hvad er det egentligt du vil ? Det ville være nemmere hvis du bare ville behandle filer ændret siden sidst (og ikke siden et tidspunkt), -beskriv hvad du vil opnå !
Avatar billede bertelbrander Novice
06. marts 2004 - 19:44 #2
Hvis du bruger Windows NT/2000/XP er det rimelig let. Hvilken version bruger du?

Hvordan ser resultatet af kommandoen "date /T" ud?
Avatar billede ulricho Juniormester
07. marts 2004 - 08:42 #3
Jeg skal foretage en konvertering af alle ændrede filer med DWG2PLT.exe i et bibliotek. Det skulle gerne løses vha. DOS standard. Jeg er helt med på, at det let kan løses med et tilrettet program.

Jeg bruger XP. Resultatet af date /T er 07-03-2004.
Avatar billede knudemand Nybegynder
07. marts 2004 - 08:54 #4
hmmm, jeg tænkte blot at hvis du valgte at flytte dine filer til et andet dir efter behandling, så kan du hver gang angribe alle filer i det pågældende dir.....og så er opgaven pludselig meget simpel
Avatar billede bertelbrander Novice
07. marts 2004 - 15:36 #5
Jeg lavede et script der checker alle filer i en mappe for at se om de er nyere end fra i går kl. 06.00.

Du gemmer koden i en .bat-fil.

Mappen der skal gennemsøges kan angives som parameter til scriptet. Hvis du vil søge i undermapper tilføjer du /S til dir kommandoen.

Det udskriver "new filenavn.ext" for alle filer der er nye. Du skal så rette dette til at gøre det du ønsker, der er to linier i bunden der skal rettes (echo New: %~1).

Hvis det er klokken 08.00 du vil checke skal du ændre 6-tallet i linien "if %Hour% GEQ 6 (" til 8.

Men i øvrigt vil jeg give knudemand ret, det er måske lettere at flytte filerne når de er behandlet.

@echo off
setlocal

for /F  "tokens=1,2,3 delims=- " %%I in ('date /T') do call :ProcessDate %%I %%J %%K

for /F "delims=;" %%I in ('dir /A-D /B %1') do call :ProcessFile "%%I" %%~tI

goto :eof

:ProcessDate

set Day=%1

set Month=%2
set Year=%3
set Today=%Day%-%Month%-%Year:~2,4%

if %Day:~0,1%==0 set Day=%Day:~1,2%
if %Month:~0,1%==0 set Month=%Month:~1,2%

if %Day%==1 (
  call :GetLastdayOfPreviousMonth
) else (
  set /A Day-=1
)

if %Day:~0,1%==%Day% set Day=0%Day%
if %Month:~0,1%==%Month% set Month=0%Month%

set Yesterday=%Day%-%Month%-%Year:~2,4%
goto :eof

:GetLastdayOfPreviousMonth
if %Month%==1 (
  set Month=12
  set Day=31
  set /A Year-=1
  goto :eof
)

set /A LeapYear="%Year% %%4"

if %Month%==3 if %LeapYear%==0 (
  set Month=2
  set Day=29
  goto :eof
)

for /F "tokens=%Month%" %%A in ("0 31 28 31 30 31 30 31 31 30 31 30 31") do set /A Day=%%A
set /A Month-=1
goto :eof

:ProcessFile
if %2==%ToDay% (
  echo New: %~1
  goto :eof
)

if not %2==%Yesterday% goto :eof

for /F "delims=:" %%I in ("%3") do set Hour=%%I
if %Hour:~0,1%==0 set Hour=%Hour:~1,2%

if %Hour% GEQ 6 (
  echo New: %~1
)
Avatar billede ulricho Juniormester
07. marts 2004 - 21:30 #6
Hej bertelbrander

Det var lige præcis, hvad jeg søgte! Der sker imidlertid en fejl i linie 2:
    for /F "delims=;" %%I in ('dir /A-D /B %1') do call :ProcessFile "%%I" %%~tI
idet den ikke forstår %%~tI. Der kommer ingen dato ud ved mig, selvom den har fanget en fejl?!

Kan du hjælpe mig videre, og ellers i øvrigt svare på spørgsmålet, så du kan få dine point?
Avatar billede bertelbrander Novice
07. marts 2004 - 23:24 #7
Jeg havde ikke fået det testet ordentligt med parameter og uden /S, dette problem skulle være løst nu.
Hvis du bruger /S switchen på dir kommandoen skal du slette linien "if not [%1]==[] set FilePath=%~dp1"

Jeg forsøger at undgå point.

@echo off
setlocal
set FilePath=
if not [%1]==[] set FilePath=%~dp1

for /F  "tokens=1,2,3 delims=- " %%I in ('date /T') do call :ProcessDate %%I %%J %%K

for /F "delims=;" %%I in ('dir /A-D /B %1') do call :ProcessFile "%FilePath%%%I"

goto :eof

:ProcessDate

set Day=%1
set Month=%2
set Year=%3
set Today=%Day%-%Month%-%Year:~2,4%

if %Day:~0,1%==0 set Day=%Day:~1,2%
if %Month:~0,1%==0 set Month=%Month:~1,2%

if %Day%==1 (
  call :GetLastdayOfPreviousMonth
) else (
  set /A Day-=1
)

if %Day:~0,1%==%Day% set Day=0%Day%
if %Month:~0,1%==%Month% set Month=0%Month%

set Yesterday=%Day%-%Month%-%Year:~2,4%
goto :eof

:GetLastdayOfPreviousMonth
if %Month%==1 (
  set Month=12
  set Day=31
  set /A Year-=1
  goto :eof
)

set /A LeapYear="%Year% %%4"

if %Month%==3 if %LeapYear%==0 (
  set Month=2
  set Day=29
  goto :eof
)

for /F "tokens=%Month%" %%A in ("0 31 28 31 30 31 30 31 31 30 31 30 31") do set /A Day=%%A
set /A Month-=1
goto :eof

:ProcessFile
for /F "tokens=1,2" %%I in ("%~t1") do set FileDate=%%I& set FileTime=%%J

if %FileDate%==%ToDay% (
  echo New: %~1
  goto :eof
)

if not %FileDate%==%Yesterday% goto :eof

for /F "delims=:" %%I in ("%FileTime%") do set Hour=%%I
if %Hour:~0,1%==0 set Hour=%Hour:~1,2%

if %Hour% GEQ 6 (
  echo New: %~1
)
Avatar billede ulricho Juniormester
08. marts 2004 - 07:32 #8
Det er meget fint. Nu virker det! Hvorfor vil du ikke have pointene? Er det en principsag? Hvad skal jeg ellers gøre med dem?
Avatar billede bertelbrander Novice
08. marts 2004 - 19:59 #9
Ja, det er en princip sag.

Du laver selv et svar som du derpå accepterer, så får du pointene tilbage.
Avatar billede ulricho Juniormester
08. marts 2004 - 22:39 #10
Det er i bund og grund også en principsag for mig, ikke at tage mine egne point ...
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester