batch-file - 复制最后 15 个创建的文件
问题描述
我有 Microsoft Batch 文件,并且在代码的一部分中,我将最后创建的具有特定命名约定的文件从文件夹 (RootDir) 复制到另一个文件夹 (CopyDir)。但现在我需要复制最近创建的 15 个相同类型的文件。你能帮我吗?
set lastmod=
pushd %RootDir%
for /f "tokens=*" %%a in ('dir _UnipolSai_Outlier_Daily_Report_Agg1__UnipolSai_Outlier_Daily_Report_Agg1*.gz /b /o-d /a-d 2^>NUL') do set lastmod=%%a & goto :xx
:xx
if "%lastmod%"=="" echo Could not locate files.&goto :eof
:::
copy /Y "%lastmod%" "%CopyDir%"
解决方案
@ECHO OFF
SETLOCAL
SET "sourcedir=."
SET /a required=15
:: remove variables starting #
FOR /F "delims==" %%a In ('set # 2^>Nul') DO SET "%%a="
FOR /f "delims=" %%a IN ('dir /b /a-d /o-d "%sourcedir%\*" ') DO (
SET "#0=Y"
FOR /L %%b IN (1,1,%required%) DO IF DEFINED #0 IF NOT DEFINED #%%b (
SET "#0="
SET "#%%b=%%a"
ECHO process "%%a"
IF defined #%required% GOTO done
)
)
SET "#0="
:done
SET #
:: remove variables starting #
FOR /F "delims==" %%a In ('set # 2^>Nul') DO SET "%%a="
GOTO :EOF
您需要更改设置sourcedir
以适应您的情况。
您显然对这些选项很熟悉dir
,所以我会留下这个问题。
这种方法清除所有以 开头的变量#
,然后#0
用作标志来确定他的文件名是否已被处理。首先将其设置为某个值,然后检查#1..#15。
如果未定义#n,则将其设置为正在处理的数据行并清除,因此每行#0
只有一个#nset
。我只选择echo
了找到的文件名 - 显然,这可以是您选择的任何处理。
一旦#15
设置完毕,终止循环 - 找到的每个值都可以作为奖励#?
推荐阅读
- sql - 如何获取具有内容计数的行
- javascript - 在同一个列表上使用多个灯箱会导致问题
- azure-devops - 使用 Azure DevOps Services REST API 将超链接添加到描述
- r - 在 R-Markdown 中绘制两个词云时出错
- ios - react-native-image-picker - 重建后的持久存储
- pandas - 有没有办法将熊猫数据框信息 - df.info() 导出到 excel 文件中?
- facebook - 使用 JAde 添加 Facebook 赞按钮
- shopify - Zapier Webhooks 将数据添加到默认负载
- jquery - 在与数据列表相同的页面上使用时,Jquery Datatables 会中断
- python - 即使我之前在 Ubuntu 18.04 中使用 python 单独安装了它们,Anaconda 是否会重新安装所有软件包,例如(numpy、pandas、pycuda 等)?