CMD:按文件夹结构排序文件



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

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

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

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

但是因为目标文件夹有999个,所以我不想事先写所有的路径…

到目前为止我的代码看起来像这样:
SET input=C:DatenInput
SET target=C:DatenTarget
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! 

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

根据Stephan的注释和一些额外的代码清理和最佳实践使用,您的代码应该是这样的。

:sort
SET "input=C:DatenInput"
SET "target=C:DatenTarget"
for /r "%input%" %%a in (*.zip) do (
For /f "tokens=1 delims=_ " %%t in ("%%~na") do (
copy /Y "%%~a" "%target%%%t"
)
)

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

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

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

相关内容

  • 没有找到相关文章

最新更新