디렉터리에서 최신 파일을 복사하는 Windows 배치 스크립트를 어떻게 작성합니까?
디렉토리의 최신 파일을 새 위치로 복사해야합니다. 지금까지 forfiles 명령 에 대한 리소스 , 여기에서 날짜 관련 질문 및 다른 관련 질문을 찾았습니다 . 조각을 맞추는 데 약간의 문제가 있습니다! 해당 디렉토리의 최신 파일을 새 위치로 어떻게 복사합니까?
Windows 쉘, 라이너 1 개 :
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
@Chris Noe
& 앞의 공백은 이전 명령의 일부가됩니다. 그것은 행복하게 후행 공백을 값에 넣는 SET로 나를 물었습니다.
환경 변수에 추가되는 후행 공백을 피하려면 set 명령을 괄호로 묶습니다.
예 FOR /F %%I IN ('DIR "*.*" /B /O:D') DO (SET NewestFile=%%I)
나는 당신이 Windows를 요청했지만 어쨌든 이것을 추가 할 것이라고 생각했습니다. Unix / Linux에서는 다음과 같이 할 수 있습니다.
cp `ls -t1 | head -1` /somedir/
수정 시간별로 정렬 된 현재 디렉토리의 모든 파일을 나열하고 가장 최근의 파일을 / somedir /에 cp 나열합니다.
두 번째 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을 수행 할 수 있습니다.
고장:
- {time} {file} 형식으로 모든 파일을 나열합니다.
- 시간별로 정렬
- 마지막 하나 가져
- 시간을 자르고 시작 / 끝에서 공백
- 결과 값 복사
중대한
After running this once, the newest file will be whatever you just copied :p ( assuming they're both in the same search scope that is ). So you may have to adjust which filenumber you copy if you want this to work more than once.
'Program Tip' 카테고리의 다른 글
PyCharm이 Python 파일을 인식하지 못함 (0) | 2020.11.09 |
---|---|
내 getter 메서드가 저장된 값을 변경하도록하는 것이 나쁜 습관입니까? (0) | 2020.11.09 |
UIView가 사용자에게 표시되는지 확인 하시겠습니까? (0) | 2020.11.09 |
URL이 존재하지 않는 경우 file_get_contents (0) | 2020.11.09 |
Github : gh- 페이지를 마스터로 미러링 (0) | 2020.11.09 |