批量将文件移至以相同编号开头的文件夹

时间:2018-07-12 14:00:02

标签: batch-file copy

我们有很多备份配置文件,我们需要保存在驱动器上。
该文件为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个数字而不是文件全名创建一个Folder。 如果只能检查“ _”之前的ID

1 个答案:

答案 0 :(得分:0)

_处分割字符串:

@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),并在(第一个)_之前占第一部分
因此,在move "%%i" "%%j"中,%%i是完整驱动器:\ path \ filename,而%%j仅是数字