Windows batch copy可根据部分名称将文件夹排序到文件夹中

Windows batch copy可根据部分名称将文件夹排序到文件夹中,windows,batch-file,Windows,Batch File,我有一个目录,里面满是以5位数字开头的文件夹: \12611_Ants \12866_Boats \13898_Cats \13898B_Misbehaving_Cats 我想要一个批处理脚本,它将创建(如有必要)文件夹,以便将这些文件夹按100组进行排序,因此在本例中,将创建\12600、\12800和\13800,并且: \12611_Ants -> \12600 \12866_Boats -> \12800 \13898_Cats -> \13800 \13898B_M

我有一个目录,里面满是以5位数字开头的文件夹:

\12611_Ants
\12866_Boats
\13898_Cats
\13898B_Misbehaving_Cats
我想要一个批处理脚本,它将创建(如有必要)文件夹,以便将这些文件夹按100组进行排序,因此在本例中,将创建\12600、\12800和\13800,并且:

\12611_Ants -> \12600
\12866_Boats -> \12800
\13898_Cats -> \13800
\13898B_Misbehaving_Cats -> \13800
留给我的是:

\12600
\12800
\13800
以后,我可能会:

\12600
\12800
\13800
\12825_Bats
\14055_Pangolins
我希望它单独保留\12600、\12800和\13800,只对\12825_蝙蝠和\14055_穿山甲文件夹进行排序:

\12825_Bats -> \12800
\14055_Pangolins -> \14000

我在根据五位数选择正确的排序文件夹时遇到了麻烦。

我通常不会发布关于主题外代码请求的答案,但有太多的单独部分需要在评论部分中进行解释或链接。因此,这里有一个帮助您的快速示例,我将不再进一步解释

它使用
dir
命令获取包含下划线的目录名,并使用
findstr
实用程序确认它们的名称以五个数字开头。一旦获得了所需的信息,它就会使用Robocopy实用程序将目录移动到各自的已排序父目录中

@Echo关闭
SetLocal EnableExtensions DisableDelayedExpansion
如果/I不是“%\uuuu CD”\uuuuu%”==“%~dp0”CD/D“%~dp0”
对于/F“EOL=?Delims=“%%G In('Dir*.*/B/A:D
^|%SystemRoot%\System32\findstr.exe
"^[0123456789][0123456789][0123456789][0123456789][0123456789][^0123456789]*_"
')Do(设置“DName=%%G”&SetLocal EnableDelayedExpansion
%SystemRoot%\System32\robocy.exe“%%G”!DName:~0,3!00\%%G”/E/Move 1>NUL
(本地)
批处理文件应放置在与目录相同的位置

要了解每个使用的命令的工作方式,请打开命令提示窗口,输入以下内容,然后按enter键:

  • echo/?
  • setlocal/?
  • 如果/?
  • cd/?
  • dir/?
  • findstr/?
  • 获取/?
  • 设置/?
  • 机器人复制/?

是否始终为五位数?有关如何执行子字符串提取,请参见
set/?
。这不是免费的代码编写服务。您需要帮助的代码在哪里?谢谢您的示例。我知道COMO不会进一步评论,但我希望这里的人能帮助我更好地理解EOL=?这使我感到困惑。正在为/?不幸的是,谷歌搜索并没有帮助我理解它。
EOL
这个词有点让人困惑,因为它实际上指的是行首,而不是行尾。默认情况下,/F的
循环将省略任何以分号开头的行
字符(我假设它是许多传统文件类型中注释行的标准前缀,
.ini
.inf
.sif
等)。当您的输出由文件名或目录名组成,而这些文件名或目录名不是以驱动器号开头时,它可能以分号(有效字符)开头。为了避免省略这些字符,我定义了一个
字符,它不是有效字符。