Windows batch copy可根据部分名称将文件夹排序到文件夹中
我有一个目录,里面满是以5位数字开头的文件夹: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
\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
等)。当您的输出由文件名或目录名组成,而这些文件名或目录名不是以驱动器号开头时,它可能以分号(有效字符)开头。为了避免省略这些字符,我定义了一个?
字符,它不是有效字符。