如何编写Windows批处理脚本以从目录复制最新文件?
时间:2020-03-06 14:23:42 来源:igfitidea点击:
我需要将目录中的最新文件复制到新位置。到目前为止,我已经在forfiles命令上找到了资源,这里有一个与日期有关的问题,以及另一个有关的问题。我只是把这些碎片放在一起有点麻烦!如何将目录中的最新文件复制到新位置?
解决方案
我知道我们要使用Windows,但我想还是要添加此功能,在Unix / Linux中,我们可以这样做:
cp `ls -t1 | head -1` /somedir/
它将列出当前目录中的所有文件(按修改时间排序),然后将最新的文件cp到/ 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
重击:
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}格式列出所有文件。
- 按时间排序
- 得到最后一个
- 切断时间,并从开始/结束处留空白
- 复制结果值
重要的
运行一次后,最新文件将是我们刚刚复制的文件:p(假设它们都在相同的搜索范围内)。
因此,如果我们希望此文件多次运行,则可能必须调整要复制的文件号。
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文件的最新版本,将其复制到服务器,然后还原数据库的方法:
: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"