从文件名的一部分创建文件夹,然后将文件移动到那里

时间:2014-02-14 08:50:25

标签: batch-file command

我一直在试图弄清楚如何制作一个能够“看到”文件名的一部分的dos命令,然后创建一个文件夹并对其中包含该部分文件名的每个文件进行排序。

每个文件名都包含以下字符(不包括扩展名):

3个字母,5个数字,1个字母,1个数字

例如:BBB12345B0

文件名中的每个字母和数字都可以有所不同,但文件名将始终具有相同的构建。

脚本应该只识别5位数,然后从这5位数创建一个文件夹,然后将这些文件移动到该文件夹​​。

以下我在互联网上找到了:

@echo off
for /f "delims=" %%a in ('dir /b /a-d') do (

if not "%%~fa"=="%~f0" (

md "%%~na" 2>nul

if exist "%%a" move "%%~na.*" "%%~na"

)

)

这很好用,除了整个文件名用于创建文件夹和排序文件。我希望脚本做同样的事情,但只使用5位数。

我尝试在此脚本中使用“令牌”。还使用了一些其他方法,但它们都没有正常工作。我对这种批处理脚本也不太熟悉。 任何人都可以帮我这个吗?

2 个答案:

答案 0 :(得分:0)

试试这个(可能需要更改'%')

的地方
md %a:~3,5% 2>nul

答案 1 :(得分:0)

EDITED:修复了批处理文件名过滤器。

测试一下:如果有数以万计的文件,那么它可以针对速度进行优化。

@echo off
for %%a in (
BBB11345B0
BBB12345B0
BBB13345B0
BBB14345B0
BBB15345B0
BBB16345B0
) do type nul >%%a

@echo off
setlocal enabledelayedexpansion
for /f "delims=" %%a in ('dir /b /a-d') do (
   if /i not "%%a"=="%~nx0" (
      echo moving "%%a"
      set "name=%%a"
      md "!name:~3,5!" 2>nul
      move "%%a" "!name:~3,5!" >nul
   )
)