CMD:按文件夹结构对文件进行排序

时间:2021-02-24 10:27:30

标签: batch-file cmd

我正在尝试创建一个 BAT 自动将输入文件夹中的 ZIP 分类到相应的目标文件夹中。

所有 ZIP 都以序列号 001 File.zip、002 File.zip、003 File.zip 等开头。

目标文件夹按照相同的方案命名:001、002、003、...、999。

所以如果一个 ZIP 进入输入文件夹,它应该自动分配到具有相同编号的相应目标文件夹。

但是由于目标文件夹最多 999 我不想事先写所有路径...

到目前为止我的代码是这样的:

SET input=C:\Daten\Input
SET target=C:\Daten\Target

for /r %input% %%a in (*.zip) do (
Set FILE=%%~nxa
Set FILEWITHOUTEXT=%%~na

Set SPLITABLE_NAME=!FILEWITHOUTEXT:_= !
for %%t in (!SPLITABLE_NAME!) do set FIRSTTOKEN=%%t
)
copy /Y %%a %target%\!FIRSTTOKEN!\!FILE! 

不幸的是,整件事根本不起作用。

2 个答案:

答案 0 :(得分:0)

根据 Stephan 的评论以及一些额外的代码清理和最佳实践用法,您的代码应该如下所示。

listen 8082; listen [::]:8082;

答案 1 :(得分:-1)

我看到您已经选择并回答了。如果您想推进现代脚本语言,您可以考虑使用 PowerShell。如果您使用的是受支持的 Windows 平台,则可以使用 PowerShell。

一旦您确信文件将被正确复制,请从 -WhatIf 命令中删除 Copy-Item

powershell -NoLogo -NoProfile -Command ^
    "Get-ChildItem -File -Path 'C:\Daten\Input' -Filter '???_*.zip' |" ^
        'ForEach-Object {" ^
            "if ($_.Name -match '^(\d{3})_.*') {" ^
                "Copy-Item $_.FullName "C:\Daten\Target\$($Matches[1])" -Whatif" ^
            "}" ^
        "}"