我需要将目录中的最新文件复制到新位置。 到目前为止,我已经在forfiles命令上找到了资源,这里有一个与日期有关的问题,以及另一个有关的问题。 我只是在拼凑一些麻烦! 如何将目录中的最新文件复制到新位置?
接受的答案给出了在命令中使用最新文件然后退出的示例。如果您需要使用其他复杂操作在bat文件中执行此操作,则可以使用以下命令将最新文件的文件名存储在变量中:
1
| FOR /F"delims=|" %%I IN ('DIR"*.*" /B /O:D') DO SET NewestFile=%%I |
现在,您可以在整个bat文件的其余部分引用%NewestFile%。
例如,这是我们用来从目录中获取数据库.bak文件的最新版本,将其复制到服务器,然后还原数据库的方法:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| :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" |
Windows外壳,一个衬里:
1
| FOR /F %%I IN ('DIR *.* /B /O:-D') DO COPY %%I <<NewDir>> & EXIT |
为了使它可以使用空格处理文件名,需要修改后的答案版本:
1 2
| FOR /F"delims=" %%I IN ('DIR . /B /O:-D') DO COPY"%%I" <<NewDir>> & GOTO :END
:END |
@克里斯·诺
Note that the space in front of the & becomes part of the previous command.
That has bitten me with SET, which happily puts trailing blanks into the value.
要绕过要添加到环境变量的尾随空格,请将set命令包装在括号中。
例如。 FOR /F %%I IN ('DIR"*.*" /B /O:D') DO (SET NewestFile=%%I)
1 2 3 4 5 6 7 8
| @echo off
set source="C:\test case"
set target="C:\Users\Alexander\Desktop
andom 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
我认为超时无法在winXP上工作
这将打开第二个cmd.exe窗口。如果您希望它消失,请将/ K替换为/ C。
显然,将new_file_loc替换为您的新文件位置。
1 2 3 4 5 6 7 8
| @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 |
我知道您要使用Windows,但我想还是要添加此功能,在Unix / Linux中,您可以这样做:
1
| cp `ls -t1 | head -1` /somedir/ |
它将列出当前目录中的所有文件(按修改时间排序),然后将最新的文件cp到/ somedir /
重击:
1 2 3 4 5 6
| find -type f -printf"%T@ %p
" \
| sort \
| tail -n 1 \
| sed -r"s/^\S+\s//;s/\s*$//" \
| xargs -iSTR cp STR newestfile |
其中" newestfile"将成为最新文件
或者,您可以执行newdir / STR或仅执行newdir
分解:
以{time} {file}格式列出所有文件。
按时间排序
得到最后一个
切断时间,并从开始/结束处留空白
复制结果值
重要
运行一次后,最新文件将是您刚刚复制的文件:p(假定它们都在属于同一搜索范围内)。
因此,如果您希望此文件多次运行,则可能必须调整要复制的文件号。