【问题标题】:Make folder from part of a filename, and move the files there从文件名的一部分创建文件夹,并将文件移动到那里
【发布时间】:2014-02-14 08:50:25
【问题描述】:

我一直在试图弄清楚如何制作一个可以“看到”文件名的一部分的 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 位数字。

我尝试在此脚本中使用“令牌”。还使用了其他一些方法,但它们都不能正常工作。我对这种批处理脚本也不太熟悉。 谁能帮我解决这个问题?

【问题讨论】:

    标签: batch-file command


    【解决方案1】:

    试试这个(可能需要换'%'的地方)

    md %a:~3,5% 2>nul
    

    【讨论】:

      【解决方案2】:

      已编辑:修复了批处理文件名过滤器。

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

      @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
         )
      )
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多