根据文件名创建文件夹名称(括号前)

时间:2018-02-07 13:10:50

标签: batch-file

我一直在寻找各处,但我找不到这个具体问题的答案。我刚刚开始使用批处理脚本进行文件/文件夹操作,并且很好地掌握了概念,但我无法解决这个问题。

情况: 我有成千上万的文件格式为'name(some info).ext'

我正在寻找一种在空格括号之前提取信息的方法,然后创建一个包含该信息的文件夹。 在此之后,我想将该文件移动到该文件夹​​。

任何人都可以指导我这样做吗?

2 个答案:

答案 0 :(得分:0)

我可以建议,(基于你现在删除的答案)

@Echo Off

Set "targetdir=%UserProfile%\Desktop\testfolder"

CD /D "%targetdir%" 2>Nul || Exit /B
For %%A In (*.rp2) Do For /F %%B In ("%%~nA") Do (
    If Not Exist "%%~B\" MD "%%~B"
    Move /Y "%%A" "%%~B">Nul)

这是一个版本,以满足包含空格的文件名以及在左括号前有0或更多空格的文件名。 它还应包括那些没有括号的

@Echo Off

Set "targetdir=%UserProfile%\Desktop\testfolder"

CD /D "%targetdir%" 2>Nul || Exit /B
Set "_="
For %%A In (*.rp2) Do For /F "Delims=(" %%B In ("%%~nA"
) Do Call :Sub "%%A" "%%B"
Exit /B

:Sub
If Not Defined _ Set "_=%~2"
If "%_:~-1%"==" " (Set "_=%_:~,-1%" & GoTo Sub) 
If Not Exist "%_%\" MD "%_%"
Move /Y %1 "%_%">Nul
Set "_="

答案 1 :(得分:0)

这应该做的工作:

@ECHO OFF
SETLOCAL EnableDelayedExpansion

FOR %%G IN ("C:\adjust\path\*.ext") DO (
    SET "folder_name=%%~nG"
    CALL :create_dir
    MOVE "%%G" "%%~dpG!folder_name!\%%~nxG"
)

PAUSE
EXIT

:create_dir
SET "end_bit=!folder_name:*(=!"
SET "folder_name=!folder_name:%end_bit%=!
SET "folder_name=!folder_name:~0,-2!"
MD "!folder_name!" >nul 2>&1
EXIT /B

这将为example创建目录example (info).ext并将该文件移动到所述目录中。