首页 > 解决方案 > 根据部分名称将文件移动到文件夹中,但不先创建文件夹

问题描述

我有一个这样的文件夹列表

Il Piccolo Sceriffo
Marvel Mix 
Orfani 
Plutos
Oscar Bestsellers
Pecos Bill

我有这样的文件

Il Piccolo Sceriffo 41 (Dardo 1994-03) [c2c dinofelix].cbr
Il piccolo sceriffo 44 (Dardo 1994-06) [c2c mystere e dinofelix].cbr
Marvel Mix 006 [1996-09][ITA][c2c][Cer8 - Miao Films].cbr
Orfani 042 - Terra 3 - Oltre il muro (2017-03).cbr
Oscar Bestsellers 1461 - Pippo Pensieri In Liberta' (Mondadori 2004-06).cbr
Pecos Bill 047 - Serie 3 - 10-11-12 (Dardo 1997-04) (c2c) [Ciupie - Dinofelix].cbr

像这样移动文件夹中的文件

Il Piccolo Sceriffo
|
|--- Il Piccolo Sceriffo 41 (Dardo 1994-03) [c2c dinofelix].cbr
|--- Il piccolo sceriffo 44 (Dardo 1994-06) [c2c mystere e dinofelix].cbr

Marvel Mix 
|
|--- Marvel Mix 006 [1996-09][ITA][c2c][Cer8 - Miao Films].cbr

Orfani 
|
|--- Orfani 042 - Terra 3 - Oltre il muro (2017-03).cbr

我使用这个脚本

@echo off
setlocal enabledelayedexpansion
pushd %1
for /F "USEBACKQ tokens=*" %%a in (`dir /b /a:-d`) do (
    set "_file=%%a"
    for /D %%b in (*) do (
        if NOT "x!_file:%%b=!" == "x!_file!" (
            move "%%a" "%%b"
        )
    )
)
popd

问题:如果我想移动,我需要先创建一个文件夹列表。但我不想以前创建文件夹。
有没有办法以最接近我给出的示例的方式创建文件夹以根据其名称移动文件?

编辑:我在使用脚本之前创建了文件夹。我尝试的是通过脚本创建新文件夹,而不必先手动创建它们。

我的名字的模式是 4 :

NAME space + numbers
NAME space -
NAME SPACE NAME space + numbers
NAME SPACE NAME space + -

例如:

艾伦 02
艾伦 -
艾伦福特 09
艾伦福特 -

标签: batch-file

解决方案


此答案基于您定义的模式some string with or without spaces,后跟space数字或-. 您不能按空格分割,因为在第一个(想要的)字符串中可能有一个或多个,但您可以在数字和-. 只是不要忘记从找到的字符串中删除最后一个字符(空格):

@echo off
setlocal enabledelayedexpansion
for %%a in (*.cbr) do (
  for /f "delims=0123456789-" %%b in ("%%a") do (
    set "folder=%%b"
    ECHO md "!folder:~0,-1!" 2>nul
    ECHO move "%%a" "!folder:~0,-1!\"
  )
)

出于安全原因,我解除了md和命令的武装。move排除故障后删除ECHO'。

注意:如果文件名包含感叹号,则会出现问题。


推荐阅读