명령줄을 사용하여 지정된 날짜 이후에 수정된 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
'itsource' 카테고리의 다른 글
PowerShell에서 변수에 숫자 값이 있는지 테스트하려면 어떻게 해야 합니까? (0) | 2023.08.25 |
---|---|
mysql stored-message에서 변수(로컬, 사용자 정의)를 선언하는 방법은 무엇입니까? (0) | 2023.08.25 |
저장 프로시저에서 출력 파라미터 크기를 정의하려면 어떻게 해야 합니까? (0) | 2023.08.20 |
가장 가까운 날짜를 표시하는 SQL 쿼리? (0) | 2023.08.20 |
herku: src refspec 마스터가 일치하지 않습니다. (0) | 2023.08.20 |