根据文件名创建文件夹的批处理文件

根据文件名创建文件夹的批处理文件


我需要创建一个 bat 文件,它将根据文件名的一部分创建一个文件夹。

下面应该使用文件内的日期创建 2 个文件夹。
它是 3 个Adobe files和 1 个.txt文件:

文件名应为20200205

SP190PED_GRN_SA_960_202002051029                  
SP190PED_GRN_SA_960_202002051029.txt     
SP191PED_RED_PPA_SA_960_202002051029          
SP191PED_RED_PPA_SA_960_202002051029

文件名应为20200218

SP190PED_GRN_SA_960_202002181029   
SP190PED_GRN_SA_960_202002181029.txt  
SP191PED_RED_PPA_SA_960_202002181029  
SP191PED_RED_PPA_SA_960_202002181030

这对我根本没有帮助:

@echo off

for %%a in (*806_*) do (
     md "%%~na" 2>nul
     move "%%a" "%%~na"
    )

pause

答案1

@echo off & cd /d "%~dp0"

setlocal enabledelayedexpansion 
for /f tokens^=* %%i in ('where .:*^|find/v "%~nx0"')do ( 
     call :trick "%%~ni" && 2>>nul md "!_dir:~0,8!"
     move "%%~i" "!_dir:~0,8!" 2>>nul >>nul
    )

:trick
set "_dir=%~1" <nul || endlocal && goto :EOF
set "_trick=%_dir:_=" & set "_dir=%" && exit /b 

_ 或者其他名称文件夹布局:\2020-02-05 \2020-02-18

@echo off & cd /d "%~dp0"

setlocal enabledelayedexpansion 
for /f tokens^=* %%i in ('where ".:*.*" ^| find /v "%~nx0"') do ( 
     call :trick "%%~ni" && 2>nul md "!_dir:~0,4!-!_dir:~4,2!-!_dir:~6,2!"
     move "%%~i" "!_dir:~0,4!-!_dir:~4,2!-!_dir:~6,2!" 2>nul >nul
    )

:trick
set "_dir=%~1" <nul || endlocal && goto :EOF
set "_trick=%_dir:_=" & set "_dir=%" && exit /b

假设:

  • bat/cmd 文件将在包含文件的同一文件夹中被保存/执行;

  • 布局中的所有文件名都有下划线分隔符_

  • 相应的名称始终是最后一个分隔符后的数字

  • 最后一个分隔符中的名称始终以数字开头;

  • 文件夹名称的目标长度为8位数字;


  1. 使用for /f循环命令where列出路径/文件夹中的所有文件
  2. where将命令输出重定向到,find /v以防止你的 bat( %~nx0) 被列出
  3. 使用:trick标签/函数设置变量名称,删除最后一个之前的任何字符串_
  4. 调用该函数并使用返回的变量来创建所需的文件夹名称
set "_trick=%_dir:_=" & set "_dir=%"

根据分隔符将字符串拆分为子字符串(作者:Sponge Belly/DosTips.com)


相关内容