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

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

How do I write a Windows batch script to copy the newest file from a directory?

我需要将目录中的最新文件复制到新位置。 到目前为止,我已经在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(假定它们都在属于同一搜索范围内)。
    因此,如果您希望此文件多次运行,则可能必须调整要复制的文件号。


    推荐阅读

      更新文件命令linux?

      更新文件命令linux?,工作,系统,地址,信息,时间,命令,目录,基础,标准,网络,lin

      linux下读取文件命令?

      linux下读取文件命令?,系统,工作,地址,数字,图片,信息,网络,命令,文件,一致,l

      linux改文件夹名命令?

      linux改文件夹名命令?,名字,软件,命令,文件,系统,目录,目标,文件名,源文件,

      linux建文件命令格式?

      linux建文件命令格式?,系统,名字,名称,时间,密码,命令,文件,文件夹,不了,数

      下载文件的命令linux?

      下载文件的命令linux?,平台,工具,服务,密码,软件,网络,位置,代理,手机,工作,

      linux命令文件传输?

      linux命令文件传输?,系统,数据,命令,文件,基本知识,源文件,目录,目标,功能,

      linux文件全选命令?

      linux文件全选命令?,电脑,系统,环境,代码,平台,服务,快捷键,文件,命令,权限,l

      linux浏览文件类命令?

      linux浏览文件类命令?,系统,信息,数据,情况,命令,标准,时间,文件,概念,管理,

      linux打包文件夹命令?

      linux打包文件夹命令?,系统,工具,管理,图片,文件,命令,位置,软件,目录,格式,l

      linux中统计文件命令?

      linux中统计文件命令?,系统,信息,数据,情况,工作,文件,时间,档案,标准,名称,L

      linux重名名文件命令?

      linux重名名文件命令?,图片,名称,名字,文件,命令,位置,代码,软件,系统,文件

      linux的建立文件命令?

      linux的建立文件命令?,名称,系统,时间,名字,命令,文件夹,位置,密码,不了,文

      linux06文件命令?

      linux06文件命令?,数字,系统,工作,第一,名字,信息,管理,文件,目录,命令,linux

      linux将文件备份命令?

      linux将文件备份命令?,系统,密码,设备,软件,通讯,较大,认证,服务,数据,文件,L

      linux运行脚本命令?

      linux运行脚本命令?,系统,代码,服务,文件,工具,平台,网站,脚本,命令,方法,Lin

      linux扩展文件命令?

      linux扩展文件命令?,工作,地址,系统,信息,命令,目录,管理,情况,文件,标准,Lin

      linux命令新增文件夹?

      linux命令新增文件夹?,系统,名字,首次,名称,新增,文件,命令,文件夹,地址,密

      linux推送文件命令?

      linux推送文件命令?,地址,系统,情况,工作,命令,文件,电脑,密码,信息,目录,Lin

      linux文件替换命令行?

      linux文件替换命令行?,资料,命令,文件,数据,名称,系统,实时,工作,字符串,批