首页 > 解决方案 > 批量将文件移动到以相同编号开头的文件夹

问题描述

我们有很多备份配置文件,我们需要保存在驱动器上。
该文件是123456_name.cfg12345_name.cfg
这可能会有所不同,但总是以 5-6 int 的数字开头。

我正在尝试制作一个批处理文件,它检查“_”之前名称前面的数字,
如果文件夹也以相同的数字开头,则将文件复制到其中,
如果文件夹不存在,则创建一个文件夹 ID 名称并将文件复制到其中。这是我已经测试过的:

    @echo off &setlocal
for /f "delims=" %%i in ('dir /b /a-d *.cfg') do (
set "filename1=%%~i"
setlocal enabledelayedexpansion
set "folder1=!filename1:~0,5!"
mkdir "!folder1!" 2>nul
move "!filename1!" "!folder1!" >nul
endlocal
)

问题是我有以 5 个数字或 6 个数字开头的文件。实际上它只使用前 5 个数字而不是文件全名创建一个文件夹。如果只能检查“_”之前的id

标签: batch-filecopy

解决方案


在以下位置拆分字符串_

@echo off &setlocal
for %%a in (12345 123456 987 987654321) do break>%%a_name.cfg

for /f "delims=" %%i in ('dir /b /a-d *.cfg') do (
  for /f "delims=_" %%j in ("%%~ni") do (
    mkdir "%%j" 2>nul
    move "%%i" "%%j"
  )
)

第一个for %%a只是生成一些测试文件。
第三个for( %%j) 拆分文件名 ( %%~ni) 并在 (first) 之前取第一部分_
所以在move "%%i" "%%j",%%i是完整的驱动器:\path\filename 并且%%j只是数字


推荐阅读