【问题标题】:CMD Batch script to sort filesCMD批处理脚本对文件进行排序
【发布时间】:2017-05-19 22:23:02
【问题描述】:

我有一个应用程序将文件保存到我同步到我的电脑的 FTP 文件夹中,其中包含多个 JPG 和 MP4 文件,以下列格式命名:

ARC20170510151547.jpg
ARC20170510151549.mp4

我想做的是:

  1. 将文件从我的 FTP 复制到我的电脑
  2. 根据文件的创建日期将文件分类到文件夹中
  3. 从 FTP 中删除超过 14 天的文件
  4. 从电脑上删除超过 1 个月的文件

使用 WinSCP 通过以下代码连接到 FTP,我可以将所有文件下载到我的本地驱动器:

"c:\program files (x86)\winscp\winscp.com" /ini=nul /command ^
    "open ftp://[username]:[password]@[ipaddress]/" ^
    "synchronize local f:\[localpath]\ /[remotepath]/ " ^
"exit"

然后我需要对文件进行排序。这是我卡住的地方。我想我知道这些命令,但我不确定如何使用“tokens”和“delims”来让它按我想要的方式工作。

@echo
for %%a in (*.*) do (
   echo processing "%%a"
      for /f "tokens=1 delims=" %%a in ("%%~nxa") do (
         md "%%b-%%c" 2>nul
         move "%%a" "%%b-%%c" >nul
      )
)
pause

我知道文件名格式不会改变,我考虑的一件事是在文件名中添加一些特殊字符,可能使用“ren”命令。然后我可以使用这些特殊字符作为搜索分隔符,但是,我再次在苦苦挣扎如何最好地继续。

使用以下脚本可以轻松删除超过 30 天的本地文件

forfiles -p "f:\[localpath]" -s -m *.* -d <number of days> -c "cmd /c del @path"

但是,我使用的 WinSCP 'RM' 命令似乎不起作用。它返回错误“找不到匹配'*

"rm /[filepath]/*<14D" ^

我们将不胜感激地收到任何帮助、建议和指导!

【问题讨论】:

  • rm /[filepath]/*&lt;14D 完全正确且有效(如果您使用的是最新版本的 WinSCP) - 如果没有,请向我们展示日志文件 - 您确定 FTP 服务器上的文件具有正确的时间戳吗?跨度>
  • 第 2 点不明确。创建的日期不一定与文件名中的日期匹配。排序意味着移动?文件夹结构也不清楚。 P4 必须深入结构还是从传输文件夹中删除?
  • 您好,感谢您的回复。抱歉,混淆了!所以是的,顶级文件夹是年份,下一个是月份,下面是包含相应文件的日期。你是对的,排序在文件上名称,恰好文件名是根据创建日期生成的

标签: batch-file for-loop cmd ftp


【解决方案1】:

由于您需要子字符串的日期元素之间没有分隔符,
子字符串仅适用于普通变量,并且在(代码块)中您需要delayed expansion

不清楚您是否需要带有年月日的文件夹,请在批处理中选择适当的部分并注释/取消注释 Rem:
启用扩展后,md 可以一步创建结构YY-MM\DD
所以你可以直接移动到那个文件夹。

@Echo off&SetLocal EnableExtensions EnableDelayedExpansion
for %%a in (ARC*.*) do (
   echo processing "%%a"
   Set File=%%~nA
   Set YY=!File:~3,4!
   Set MM=!File:~7,2!
   Set DD=!File:~9,2!
   Rem YY-MM\DD
   md "!YY!-!MM!\!DD!" 2>nul
   move "%%a" "!YY!-!MM!\!DD!" >nul
)
pause

【讨论】:

  • 感谢您的编辑,这非常有效!非常感谢你的协助!我将再看一下使用 WinSCP 时“rm”命令的问题,并按要求发送日志文件。
  • 为了尊重有用的答案,您可以投票和/或勾选答案。
【解决方案2】:

@LotPings!谢谢你的剧本。这几乎完成了我想要它做的事情。我修改了下面的脚本,根据 Day 将文件移动到文件夹中。

因此,每天可能会生成 100 到 200 个文件。所以我不介意每天都有一个文件夹。将文件移动到各自的“Day”文件夹后,我想做的是创建一个子文件夹“!YY!-!MM!”然后移动“!DD!”文件夹放入“!YY!-!MM!”文件夹。

@Echo off&SetLocal EnableExtensions EnableDelayedExpansion
    for %%a in (ARC*.*) do (
    echo processing "%%a"
    Set File=%%~a
    Set YY=!File:~3,4!
    Set MM=!File:~7,2!
    Set DD=!File:~9,2!
    md "!DD!" 2>nul
    md "!YY!-!MM!" 2>nul
    move "%%a" "!DD!" >nul
 )
 pause

【讨论】:

    猜你喜欢
    • 2021-05-21
    • 1970-01-01
    • 1970-01-01
    • 2021-05-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-28
    相关资源
    最近更新 更多