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

Dev*_*rin 67 batch-file forfiles

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

Chr*_*son 128

接受的答案给出了在命令中使用最新文件然后退出的示例.如果需要在包含其他复杂操作的bat文件中执行此操作,可以使用以下命令将最新文件的文件名存储在变量中:

FOR /F "delims=|" %%I IN ('DIR "*.*" /B /O:D') DO SET NewestFile=%%I
Run Code Online (Sandbox Code Playgroud)

现在,您可以在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"
Run Code Online (Sandbox Code Playgroud)

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

Pab*_*loG 68

Windows外壳,一个内胆:

FOR /F %%I IN ('DIR *.* /B /O:-D') DO COPY %%I <<NewDir>> & EXIT
Run Code Online (Sandbox Code Playgroud)

  • 那应该是exit/b或goto:eof以避免关闭cmd窗口...... (9认同)
  • 默认分隔符是<tab>和<space>所以最好在FOR/F之后添加"delims ="以接受带空格的文件名.整个命令将是FOR/F"delims ="%% I IN('DIR*.*/B/O:-D')DO COPY %% I << NewDir >>&EXIT (7认同)
  • @idbrii“(名称中带有点)” &lt; 否,因为 Windows 中的“*.*”具有特殊行为来匹配不带点的文件,与“*”相同。(顺便说一句,即使是像“*.*.*.*”这样的东西也是如此。) (3认同)
  • @Ashwin:%%我是来自`DIR*.*/B/O:-D`的值 - 所以对于循环的每次迭代,它都是文件名.由于循环在第一次迭代时退出,因此它的唯一值是目录中的第一个文件(名称中带有一个点). (2认同)

Tim*_*ica 11

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

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

  • 支持空间需要哪些更改?只有"%% I"的报价? (3认同)

DoT*_*Evo 5

@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
Run Code Online (Sandbox Code Playgroud)

我尝试从文件夹中复制最新文件

只需设置您的源和目标文件夹,它应该可以工作

这个忽略文件夹,只关心文件

推荐您选择在DIR路径文件类型改变*.**.zip例如

我认为 TIMEOUT 在 winXP 上不起作用