2008-09-18 118 views

回答

59

Windows外壳,一个衬里:

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

这可能应该是退出/ b或转到:eof以避免关闭cmd窗口... – Joey 2009-06-10 23:04:01

+6

默认分隔符是因此,最好在FOR/F之后添加“delims =”以接受带空格的文件名。整个命令将为FOR/F“delims =”%% I IN('DIR *。*/B/O:-D')DO COPY %% I <>&EXIT – Cheburek 2010-10-13 22:16:38

+1

请注意,&前面的空格前一个命令的一部分。这让我对SET感到困惑,它乐于将尾随空白放入价值中。 – 2011-03-05 19:15:40

2

我知道你要的Windows,但认为我会反正添加此,在Unix/Linux操作系统,你可以这样做:

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

其中将列出通过修改时间,然后CP排序的当前目录下的所有文件最近的/ somedir/

+0

我没想到在这篇文章中有这个答案。非常感谢你。 – Mrk 2015-05-22 04:40:47

2

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

显然,将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 
-2

击:

find -type f -printf "%[email protected] %p \n" \ 
    | sort \ 
    | tail -n 1 \ 
    | sed -r "s/^\S+\s//;s/\s*$//" \ 
    | xargs -iSTR cp STR newestfile 

其中 “newestfile” 将成为newestfile

或者,你可以做NEWDIR/STR或只是NEWDIR

击穿:

  1. 列出{time} {file}中的所有文件格式。
  2. 通过时间
  3. 排序他们从一开始/结束得到最后一个
  4. 切断时间,和空白
  5. 拷贝产生的价值

重要

运行后这一次,最新的文件将是你刚刚复制的任何内容:p(假设它们都处于相同的搜索范围)。 所以你可能需要调整你复制的文件编号,如果你想让它工作多次。

114

接受的答案给出了使用在一个命令的最新的文件,然后退出的一个例子。如果你需要做到这一点与其他复杂的操作一个bat文件,你可以使用以下方法来存储在一个变量的最新文件的文件名:

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

现在你可以在整个其余参考%NewestFile%你的bat文件。

例如,这里是我们用来获取数据库的最新版本。从目录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" 
9

允许这种使用空格的文件名的工作,是需要接受的答案的修改版本:

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

@克里斯野老

注意,在&前面的空间成为前一命令的一部分。 SET让我感到困惑,它愉快地将尾随空格放入值中。

要绕过要添加到环境变量的尾随空间,请将parens中的set命令封装起来。

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

2
@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上工作我认为

相关问题