【问题标题】:Using a batch script, copy only those files that match a certain string in file name使用批处理脚本,仅复制与文件名中特定字符串匹配的文件
【发布时间】:2022-01-03 17:25:53
【问题描述】:

我正在尝试找到一种方法来查找标有特定日期戳的文件,然后将其复制到新文件夹中。 我的文件夹结构是这样的:

D:\GOES 数据中心\2021-12-31\ D:\GOES 数据中心\2022-01-01
D:\GOES 数据中心\2022-01-02\ D:\GOES 数据中心\2022-01-03\

每个文件夹中都有这样的文件

GOES16_FD_FC_CUSTOMLUT_20220101T140020Z.jpg GOES16_FD_FC_CUSTOMLUT_20220101T143020Z.jpg GOES16_FD_FC_CUSTOMLUT_20220101T150019Z.jpg GOES16_FD_FC_CUSTOMLUT_20220101T153020Z.jpg GOES16_FD_FC_CUSTOMLUT_20220101T160020Z.jpg GOES16_FD_FC_CUSTOMLUT_20220101T160018Z.jpg GOES16_FD_FC_CUSTOMLUT_20220101T170020Z.jpg GOES16_FD_FC_CUSTOMLUT_20220101T173019Z.jpg GOES16_FD_FC_CUSTOMLUT_20220101T180020Z.jpg 等

我需要一个批处理脚本的命令行来查找从特定日期开始的每个文件,只有“T1700”时间戳,然后将该文件复制到新文件夹。

这是我尝试过的:

for /R "D:\GOES DATA CENTER\goes16\fd\CUSTOMLUT\" %%f in (*.jpg) do xcopy "%%f" "F:\SatelliteInput\CUSTOMLUT\compositeFC" /D /D:%startdate%

这个解决方案可以满足我的需要;使用 %satellite%、%bandtype% 和 %startdate% 的变量 - 我稍后也会添加一个用户定义的变量。

for /R "D:\GOES  DATA CENTER\goes%satellite%\fd\%bandtype%\" %%f in (*T1700*.jpg) do xcopy "%%f" "D:\TEMPPROCESSING\HIGHNOON" /D /D:%startdate% /S /C /Y

【问题讨论】:

  • xcopy /? 应该回答你的问题。
  • 这是我用来按文件日期搜索的方法,其中 startdate 作为我设置的变量:for /R "D:\GOES DATA CENTER\goes16\fd\CUSTOMLUT\" %%f in (* .jpg) do xcopy "%%f" "F:\SatelliteInput\CUSTOMLUT\compositeFC" /D /D:%startdate% 如何修改它以仅使用 T1700 搜索那些文件?
  • 试一试@Echo OFF Set "Pattern=T1700" For /R "D:\GOES DATA CENTER\" %%# in (*.jpg) Do (Echo %%~nx# | FIND "GOES16_FD_FC_CUSTOMLUT_20220102%Pattern%0020Z" 1>NUL && ( Set /A "Index+=1" Call Set "JPG%%INDEX%%=%%~#" Echo Full Path: %%~# Echo FileName : %% ~nx# REM Echo 目录:%%~p# ) ) ::CLS Echo JPG1 = %JPG1% Echo JPG2 = %JPG2% Pause&Exit
  • @CarlReinemann 如果您只想查找和复制*T1700???.jpg,为什么要在命令集FOR 中使用通配符模式*.jpg

标签: windows batch-file cmd


【解决方案1】:

迭代根文件夹中的每个文件夹:

@echo off
for /R "D:\GOES DATA CENTER" %%i in ("*T1700???.jpg") do copy "%%~i" "D:\destination folder\"

或者只做你在列表中定义的文件夹:

@echo off
set "dirs="D:\GOES DATA CENTER\2021-12-31" "D:\GOES DATA CENTER\2022-01-01" "D:\GOES DATA CENTER\2022-01-02" "D:\GOES DATA CENTER\2022-01-03""
for %%i in (%dirs%) do copy "%%~i\*T1700???.jpg" "destination folder"

【讨论】:

  • 这假定文件名在所有子目录中都是唯一的。如果日期是文件名的一部分,它们可能是。如果没有,则需要在目标中复制子目录结构。
  • @lit,是的,但我只是继续 OP 在问题中给出的示例。谢谢。
  • 感谢您的意见,我想我找到了一个似乎可行的解决方案,并将其添加到我的帖子底部
猜你喜欢
  • 2020-04-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多