我正在尝试创建一个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" ^
"}" ^
"}"