我需要将目录中的最新文件复制到新位置。到目前为止,我已经找到了有关forfiles命令的资源、一个与日期相关的问题here 和另一个相关的问题。我只是有一点麻烦把碎片放在一起!如何将该目录中的最新文件复制到新位置?
9 回答
接受的答案给出了在命令中使用最新文件然后退出的示例。如果您需要在具有其他复杂操作的 bat 文件中执行此操作,您可以使用以下内容将最新文件的文件名存储在变量中:
FOR /F "delims=" %%I IN ('DIR "*.*" /A-D /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"
Windows 外壳,一个衬里:
FOR /F "delims=" %%I IN ('DIR *.* /A-D /B /O:-D') DO COPY "%%I" <<NewDir>> & EXIT
为了允许它使用空格处理文件名,需要接受答案的修改版本:
FOR /F "delims=" %%I IN ('DIR . /B /O:-D') DO COPY "%%I" <<NewDir>> & GOTO :END
:END
@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上不起作用
我知道你要求 Windows 但我想我还是会添加这个,在 Unix/Linux 中你可以这样做:
cp `ls -t1 | head -1` /somedir/
它将列出当前目录中按修改时间排序的所有文件,然后将最新的 cp 到 /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
@克里斯·诺伊
请注意,& 前面的空格成为上一个命令的一部分。这让我对 SET 感到厌烦,它很乐意将尾随空格放入值中。
要绕过添加到环境变量的尾随空格,请将 set 命令包装在括号中。
例如FOR /F %%I IN ('DIR "*.*" /B /O:D') DO (SET NewestFile=%%I)
将最近的文件date
从一个目录复制到另一个目录
echo off
rem copying latest file with current date from one folder to another folder
cls
echo Copying files. Please wait...
:: echo Would you like to do a copy?
rem pause
for /f "tokens=1-4 delims=/ " %%i in ("%date%") do (
set dow=%%i
set month=%%j
set day=%%k
set year=%%l
)
:: Pad digits with leading zeros e.g Sample_01-01-21.csv
set yy=%year:~-2%
:: Alternate way - set datestr=%date:~0,2%-%date:~3,2%-%date:~6,2%
set datestr=%day%-%month%-%yy%
:: echo "\\networkdrive\Test\Sample_%datestr%.csv"
rem copy files from src to dest e.g copy <src path> <dest path>
copy "D:\Source\Sample_%datestr%.csv" D:\Destination
echo Completed
rem pause
Save
上面的代码具有.bat
文件格式,并根据您的需要更改目录并运行batch
文件。
重击:
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
分解:
- 以 {time} {file} 格式列出所有文件。
- 按时间排序
- 得到最后一个
- 从开始/结束切断时间和空白
- 复制结果值
重要的
运行一次后,最新的文件将是您刚刚复制的任何内容:p(假设它们都在同一个搜索范围内)。因此,如果您希望它不止一次地工作,您可能必须调整您复制的文件编号。