itsource

명령줄을 사용하여 지정된 날짜 이후에 수정된 Windows에서 파일 찾기

mycopycode 2023. 8. 25. 23:32
반응형

명령줄을 사용하여 지정된 날짜 이후에 수정된 Windows에서 파일 찾기

명령줄을 사용하여 지정된 날짜 이후에 수정된 디스크의 파일을 검색해야 합니다.

예:

   dir /S /B WHERE modified date > 12/07/2013

forfiles명령은 PowerShell에 의존하지 않고 작동합니다.기사는 다음과 같습니다.

수정된 시간을 기준으로 파일 찾기

Microsoft Technet 설명서: 파일

위의 예:

forfiles /P <dir> /S /D +12/07/2013
  • /P 검색 시작 경로
  • /S 하위 디렉터리로 반복
  • /D 검색할 날짜, "+"는 "보다 큼" 또는 "이후"를 의미합니다.

PowerShell을 사용하여 이 작업을 수행할 수 있습니다.시도:

Get-ChildItem -Recurse | Where-Object { $_.LastWriteTime -ge "12/27/2016" }

다음 예와 같이 XCOPY를 사용하여 지정된 날짜 이후에 수정된 파일을 검색하고 2018년 마지막 날 이후의 파일을 찾을 수 있습니다.

xcopy *.* c:\temp\*.* /D:12-31-2018 /L /S

이 예에서는 검색이 시작되는 디렉토리에 있습니다.

C:\temp*.구문이 필요할 뿐이며, 여기에 복사되는 내용은 없습니다.

/D:12-31-2018은 지정된 날짜를 포함하여 찾고 있는 파일 수정 날짜를 지정합니다.

/L: 드라이브 및 경로를 포함한 파일 이름을 표시하고 XCOPY가 어떠한 파일도 복사하지 않도록 합니다.

/S하위 디렉터리에서 검색합니다.

파일 크기가 변경되어 PowerShell이 없었습니다.저는 다음을 사용했지만, 단서는 다른 게시물에서 나왔습니다.

http://www.scotiasystems.com/blog/it-hints-and-tips/quick-way-to-find-recently-changed-files-in-windows Windows 명령어(파일 크기만 해당)

set Target=E:\userdata
rem Date format is M-D-YYYY
set date=12-13-2013
set Filelist=d:\temp\filelist.txt
set Sizelist=d:\temp\sizelist%date%.csv

echo Target is %Target%
echo Start date is %date%
echo file list is %Filelist%
echo Sizelist is %sizelist%

Xcopy %Target% /D:%date% /L /S  > %Filelist%
echo FileSize (bytes), FileName > %sizelist%

For /f "tokens=1 delims=;" %%j in (%Filelist%) do (
                call :Size "%%j"
                )
Goto :EOF

:Size
@echo off
echo %~z1, %1 >> %sizelist%

저도 문제가 제가하여 XCOPY를 했습니다.for루프를 사용하여 목록을 이동하고 각 파일에 필요한 날짜/시간 정보를 로그에 추가했습니다.

xcopy X:\file_*.log X:\temp /D:07-17-2014 /L /Y > X:\files.txt
for /f "tokens=* delims=" %%a in (X:\files.txt ) do (
    @echo %%~ta %%a >> X:\files.log
)

그것은 다음과 같은 결과를 낳았고, 그것이 바로 제가 원했던 것입니다.

X:\>()
07/17/2014 09:41 AM X:\file_201407170600.log

X:\>()
07/17/2014 09:41 AM X:\file_201407170615.log

X:\>()
07/17/2014 09:23 AM X:\file_201407170630.log

PowerShell을 사용하기로 결정한 경우 시간 및 날짜 범위에서도 작동합니다.

Get-ChildItem -Recurse | Where-Object {($_.LastWriteTime -ge "04/15/2018 20:00:00") -and ($
_.LastWriteTime -lt "04/15/2018 21:00:00")}

프로그램 날짜 또는 로케일에 구애받지 않는 날짜 시간을 사용하는 방법

Get-ChildItem -Recurse | Where-Object {($_.LastWriteTime -ge (new-object System.DateTime 2018, 1, 10, 12, 30, 00)) -and ($_.LastWriteTime -lt (new-object System.DateTime 2018, 1, 14, 12, 15, 59))}

여기서 날짜와 시간은 시간 특정성이 증가하는 순서로 입력됩니다.

년, 월, 일, 시간, 분, 초

저도 비슷한 도전을 했습니다.저는 용한사를 요.forfiles하지만 저는 그것이 단지 >가 아닌 >=를 준다는 것을 알아차렸습니다.에, 계산하고 date + 1 day(월의 마지막 날 또는 작년의 마지막 날에 대한 논리를 생각해 보십시오.)

나는 실행되는 함수를 만들었습니다.forfiles특정 날짜 동안그것은 우리에게 수정 날짜가 있는 모든 파일을 제공합니다.>= _date_그리고 각 파일에 대해 수정 날짜가_date_출력이 동일하지 않은 경우에만 파일로 출력합니다.즉, 출력 파일에는 다음 파일에 대한 항목만 있습니다.> _date_.

그런 다음 출력 파일이 있는지 확인하여 현재 디렉터리에 입력 날짜보다 큰 파일이 있는지 확인할 수 있습니다.또한 어떤 파일이 더 최신인지 알고 싶다면 출력 파일의 내용을 볼 수 있습니다.

마지막으로, MM/DD/YYY의 날짜 형식을 사용한 파일에서 제 입력이 구문 분석되었습니다. 즉, 7월 1일은 2019년 7월 1일입니다.하지만 FORFILES의 날짜는 선행 0을 사용하지 않기 때문에 선행 0을 삭제하여 번역해야 합니다.

저의 첫 번째 시도는 /A를 사용하여 선행 0을 떨어뜨린다고 생각하는 것이었습니다.값이 8진수로 표시되지 않습니다. 제 첫 번째 시도의 실수를 반복하지 마십시오.그래서 저는 작은 도우미 기능을 만들었습니다. getNum은 선행 0을 삭제합니다.

:: ########################################################################
:: :findNewerFiles
::
::     Windowsfile interface will only tell you if a file is
::     greater than OR EQUAL to the current date. Had to figure a way
::     to get just greater than.
::
::     Use 'forfiles' to find all files that are >= the specific date, and for
::     each file if the files date is not equal to the specific date then echo
::     the file information into the new-file-log.
::
::     If the new-file-log exists after we're all done, then it means there is
::     at least one file newer than the specified date.
::
:: PARMS:
::
::     %1 - MONTH
::
::     %2 - DAY
::
::     %3 - YEAR
::
:: ERRORLEVEL:
::     0  if no newer files found
::     !0 if a newer file was found
::
:findNewerFiles
SETLOCAL
    CALL :getNum M "%~1"
    CALL :getNum D "%~2"
    CALL :getNum Y "%~3"


    SET "RETVAL=1"

    %bu.callecho% PUSHD %G[3PROOT_UNC]%

    ECHO Last build date was: %M%/%D%/%Y%
    del "%G[NEW_FILE_LOG]%" >nul 2>&1

    FORFILES /p .\ /S /D +%M%/%D%/%Y% ^
             /c "cmd /c if /I @ISDIR == false if not @fdate==%M%/%D%/%Y% echo @fdate @path>>%G[NEW_FILE_LOG]%"

    IF EXIST "%G[NEW_FILE_LOG]%" (
        SET "RETVAL=0"
        TYPE "%G[NEW_FILE_LOG]%"
    )

    %bu.callecho% POPD
(ENDLOCAL
 EXIT /B %RETVAL%)





:: ########################################################################
:: :getNum
::
::     Remove leading 0 from input number and place results in output variable
::
:: PARMS:
::
::     %1 - OUTPUT VARIABLE
::          Name of the output variable to be populated
::
::     %2 - INPUT VARIABLE
::          The number to have leading zeros trimmed from
::
:: ERRORLEVEL:
::     0  always
::
:getNum
SETLOCAL
    SET "D=%~1"
    SET "M=%~2"

    IF "%M:~0,1%" EQU "0" (
        SET "M=%M:~1%"
    )

(ENDLOCAL
 SET "%D%=%M%"
 EXIT /B 0)

언급URL : https://stackoverflow.com/questions/17616045/find-files-on-windows-modified-after-a-given-date-using-the-command-line

반응형