当前位置:  开发笔记 > 编程语言 > 正文

如何编写Windows批处理脚本以从目录中复制最新文件?

如何解决《如何编写Windows批处理脚本以从目录中复制最新文件?》经验,为你挑选了3个好方法。

我需要将目录中的最新文件复制到新位置.到目前为止,我已经找到了forfiles命令的资源,这里有一个与日期相关的问题,以及另一个相关的问题.我只是把这些碎片放在一起有点麻烦!如何将该目录中的最新文件复制到新位置?



1> Chris Magnus..:

接受的答案给出了在命令中使用最新文件然后退出的示例.如果需要在包含其他复杂操作的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  -P  -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"


很好......我正在寻找如何获取最新文件,你给出的代码示例是我正在搜索这个的确切原因,恢复sql server备份!

2> PabloG..:

Windows外壳,一个内胆:

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


那应该是exit/b或goto:eof以避免关闭cmd窗口......
默认分隔符是所以最好在FOR/F之后添加"delims ="以接受带空格的文件名.整个命令将是FOR/F"delims ="%% I IN('DIR*.*/B/O:-D')DO COPY %% I << NewDir >>&EXIT
@Ashwin:%%我是来自`DIR*.*/B/O:-D`的值 - 所以对于循环的每次迭代,它都是文件名.由于循环在第一次迭代时退出,因此它的唯一值是目录中的第一个文件(名称中带有一个点).

3> TimH - reins..:

要允许它使用空格处理文件名,需要修改后的答案版本:

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


支持空间需要哪些更改?只有"%% I"的报价?
推荐阅读
手机用户2402852387
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有