我需要将目录中的最新文件复制到新位置。到目前为止我已经找到了资源 福菲莱斯 命令,一个 与日期相关的问题 这里,还有另一个 相关问题. 。我只是在将各个部分组合在一起时遇到了一些麻烦!如何将该目录中的最新文件复制到新位置?

有帮助吗?

解决方案

Windows 外壳,一层内衬:

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

其他提示

接受的答案给出了在命令中使用最新文件然后退出的示例。如果您需要在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

@克里斯·诺伊

请注意,& 前面的空格将成为上一个命令的一部分。这让我对 SET 很感兴趣,它很乐意将尾随空白放入值中。

要避免添加到环境变量中的尾随空格,请将 set 命令括在括号中。

例如。 FOR /F %%I IN ('DIR "*.*" /B /O:D') DO (SET NewestFile=%%I)

我知道你要求 Windows,但我想我还是会添加这个,在 Unix/Linux 中你可以这样做:

cp `ls -t1 | head -1` /somedir/

它将列出当前目录中的所有文件,按修改时间排序,然后将最新的文件复制到 /somedir/

这将打开第二个 cmd.exe 窗口。如果您希望它消失,请将 /K 替换为 /C。

显然,将 new_file_loc 替换为新文件位置。

@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
@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 例如

我认为 TIMEOUT 在 winXP 上不起作用

重击:

 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

分解:

  1. 以 {time} {file} 格式列出所有文件。
  2. 按时间排序
  3. 得到最后一个
  4. 从开始/结束处截断时间和空格
  5. 复制结果值

重要的

运行一次后,最新的文件将是您刚刚复制的文件:p(假设它们都在同一搜索范围内)。因此,如果您希望它多次工作,您可能必须调整复制的文件编号。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top