我需要将目录中的最新文件复制到新位置。到目前为止,我已经在forfiles命令上找到了资源,这里有一个与日期有关的问题,以及另一个有关的问题。我只是把这些碎片放在一起有点麻烦!如何将目录中的最新文件复制到新位置?
Answers:
Windows外壳,一个内胆:
FOR /F %%I IN ('DIR *.* /B /O:-D') DO COPY %%I <<NewDir>> & EXIT
DIR *.* /B /O:-D
-的值,因此对于循环的每次迭代,它都是文件名。由于循环在第一次迭代时退出,因此唯一的值是目录中的第一个文件(名称中带有点)。
接受的答案给出了在命令中使用最新文件然后退出的示例。如果您需要使用其他复杂操作在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"
为了使它可以使用空格处理文件名,需要修改后的答案版本:
FOR /F "delims=" %%I IN ('DIR . /B /O:-D') DO COPY "%%I" <<NewDir>> & GOTO :END
:END
@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
例如
我认为超时无法在winXP上工作
@克里斯·诺
注意,&前面的空格成为上一个命令的一部分。这让SET感到困扰,它很高兴将尾随空白插入值中。
要绕过要添加到环境变量的尾随空格,请将set命令包装在括号中。
例如 FOR /F %%I IN ('DIR "*.*" /B /O:D') DO (SET NewestFile=%%I)
SET
是使用像set "NewestFile=%%I"
(set var=&complex^)
报价工作失败set "var=&complex^"
重击:
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
分解:
重要
运行一次后,最新文件将是您刚刚复制的文件:p(假设它们都在相同的搜索范围内)。因此,如果您希望此文件多次运行,则可能必须调整要复制的文件号。