디렉터리에서 최신 파일을 복사하기 위해 Windows 배치 스크립트를 어떻게 작성합니까?

StackOverflow https://stackoverflow.com/questions/97371

  •  01-07-2019
  •  | 
  •  

문제

디렉터리의 최신 파일을 새 위치로 복사해야 합니다.지금까지 나는 다음에서 리소스를 찾았습니다. forfiles 명령, a 날짜 관련 질문 여기 그리고 또 다른 관련 질문.조각을 모으는 데 약간의 어려움이 있습니다!해당 디렉토리의 최신 파일을 새 위치로 어떻게 복사합니까?

도움이 되었습니까?

해결책

Windows 셸, 하나의 라이너:

FOR /F %%I IN ('DIR *.* /B /O:-D') DO COPY %%I <<NewDir>> & EXIT

다른 팁

허용되는 대답은 명령에서 최신 파일을 사용한 다음 종료하는 예를 제공합니다.다른 복잡한 작업과 함께 bat 파일에서 이 작업을 수행해야 하는 경우 다음을 사용하여 최신 파일의 파일 이름을 변수에 저장할 수 있습니다.

FOR /F "delims=|" %%I IN ('DIR "*.*" /B /O:D') DO SET NewestFile=%%I

이제 나머지 bat 파일 전체에서 %NewestFile%을 참조할 수 있습니다.

예를 들어 다음은 디렉터리에서 최신 버전의 데이터베이스 .bak 파일을 가져와 서버에 복사한 다음 db를 복원하는 데 사용하는 방법입니다.

:Variables
SET DatabaseBackupPath=\\virtualserver1\Database Backups

echo.
echo Restore WebServer Database
FOR /F "delims=|" %%I IN ('DIR "%DatabaseBackupPath%\WebServer\*.bak" /B /O:D') DO SET NewestFile=%%I
copy "%DatabaseBackupPath%\WebServer\%NewestFile%" "D:\"

sqlcmd -U <username> -P <password> -d master -Q ^
"RESTORE DATABASE [ExampleDatabaseName] ^
FROM  DISK = N'D:\%NewestFile%' ^
WITH  FILE = 1,  ^
MOVE N'Example_CS' TO N'C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Example.mdf',  ^
MOVE N'Example_CS_log' TO N'C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Example_1.LDF',  ^
NOUNLOAD,  STATS = 10"

공백을 사용하는 파일 이름과 함께 작동하려면 허용되는 답변의 수정된 버전이 필요합니다.

FOR /F "delims=" %%I IN ('DIR . /B /O:-D') DO COPY "%%I" <<NewDir>> & GOTO :END
:END

@크리스 노

& 앞의 공백은 이전 명령의 일부가 됩니다.그것은 값에 후행 공백을 행복하게 넣는 SET로 나를 물었습니다.

환경 변수에 추가되는 후행 공백을 해결하려면 set 명령을 괄호로 묶습니다.

예: FOR /F %%I IN ('DIR "*.*" /B /O:D') DO (SET NewestFile=%%I)

나는 당신이 Windows를 요청했다는 것을 알고 있지만 어쨌든 이것을 추가할 것이라고 생각했습니다. Unix/Linux에서는 다음을 수행할 수 있습니다.

cp `ls -t1 | head -1` /somedir/

현재 디렉토리의 모든 파일을 수정 시간별로 정렬한 다음 가장 최근 파일을 /somedir/에 나열합니다.

두 번째 cmd.exe 창이 열립니다.이를 없애려면 /K를 /C로 바꾸십시오.

분명히 new_file_loc를 새 파일 위치로 바꾸십시오.

@echo off
for /F %%i in ('dir /B /O:-D *.txt') do (
    call :open "%%i"
    exit /B 0
)
:open
    start "window title" "cmd /K copy %~1 new_file_loc"
exit /B 0
@echo off
set source="C:\test case"
set target="C:\Users\Alexander\Desktop\random folder"

FOR /F "delims=" %%I IN ('DIR %source%\*.* /A:-D /O:-D /B') DO COPY %source%\"%%I" %target% & echo %%I & GOTO :END
:END
TIMEOUT 4

폴더에서 최신 파일을 복사하려고 했습니다.

소스 및 대상 폴더를 설정하면 작동합니다.

이것은 폴더를 무시하고 파일에만 관심을 둡니다.

DIR 경로 변경에서 파일 형식을 선택하는 것이 좋습니다. *.* 에게 *.zip 예를 들어

TIMEOUT은 winXP에서 작동하지 않을 것 같아요.

세게 때리다:

 find -type f -printf "%T@ %p \n" \
     | sort  \
     | tail -n 1  \
     | sed -r "s/^\S+\s//;s/\s*$//" \
     | xargs -iSTR cp STR newestfile

여기서 "newestfile"은 최신 파일이 됩니다.

또는 newdir/STR 또는 그냥 newdir을 수행할 수도 있습니다.

고장:

  1. {time} {file} 형식으로 모든 파일을 나열합니다.
  2. 시간별로 정렬해 보세요
  3. 마지막 것을 가져와
  4. 시간을 잘라내고 시작/끝에서 공백을 넣습니다.
  5. 결과 값 복사

중요한

이것을 한 번 실행한 후에는 방금 복사한 파일이 최신 파일이 됩니다. :p(둘 다 동일한 검색 범위에 있다고 가정).따라서 이 작업을 두 번 이상 수행하려면 복사할 파일 번호를 조정해야 할 수도 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top