批处理脚本为每个图像创建一个文件夹

时间:2018-06-21 19:14:16

标签: batch-file

我有一个包含100张图像的文件夹。所有图像都以这种方式命名:

FOLDER
 - MY COOL IMAGE.JPG
 - MY COOL IMAGE 2.JPG
 - MY COOL IMAGE 3.JPG
 ...

我需要为每个图像创建一个文件夹,该文件夹的名称与对应图像的名称相同。

FOLDERS
 -my-cool-image
   - MY COOL IMAGE.JPG
 -my-cool-image-2
   - MY COOL IMAGE 2.JPG
 -my-cool-image-3
   - MY COOL IMAGE 3.JPG
 ...

我在Windows上,正在寻找一个脚本来自动执行此操作。

如果有人可以帮助您提供一些链接和/或示例代码,我将不胜感激。

谢谢。

2 个答案:

答案 0 :(得分:1)

这行代码是一个非常简单的解决方案。

FOR %%G IN (*.jpg) DO MD "%%~nG"

~n修饰符告诉它提供不带扩展名的基本文件名。

要将文件移动到新目录,只需使用move命令。

FOR %%G IN (*.jpg) DO (
    MD "%%~nG"
    move "%%~G" "%%~nG\"
)

这是带有小写字母和连字符的最终代码。

@echo off
setlocal enabledelayedexpansion

For %%G IN (*.jpg) DO (
    set "str=%%~nG"
    set "str=-!str: =-!"
    call :toLower str
    MD "!str!"
    move "%%~G" "!str!\"
)

GOTO :EOF
:toLower str -- converts uppercase character to lowercase
::           -- str [in,out] - valref of string variable to be converted
:$created 20060101 :$changed 20080219 :$categories StringManipulation
:$source https://www.dostips.com
if not defined %~1 EXIT /b
for %%a in ("A=a" "B=b" "C=c" "D=d" "E=e" "F=f" "G=g" "H=h" "I=i"
            "J=j" "K=k" "L=l" "M=m" "N=n" "O=o" "P=p" "Q=q" "R=r"
            "S=s" "T=t" "U=u" "V=v" "W=w" "X=x" "Y=y" "Z=z" "Ä=ä"
            "Ö=ö" "Ü=ü") do (
    call set "%~1=%%%~1:%%~a%%"
)
EXIT /b

我完全忘记了/L命令中的DIR选项。这大大缩短了代码。

@echo off
setlocal enabledelayedexpansion

For /f "delims=" %%G IN ('dir /A-D /B /L *.jpg') DO (
    set "str=%%~nG"
    set "str=-!str: =-!"
    MD "!str!"
    move "%%~G" "!str!\"
)

我将添加更多代码示例,因为将其他代码添加到您所问的另一个问题中非常容易。

要在新创建的目录中创建一个空文本文件,将只是一行额外的代码。您使用大于符号的重定向运算符将输出发送到文件。我们将在NUL设备上使用type命令来创建一个空文件。您可以根据需要命名文件。

type nul>"!str!\file.txt"

如果要在文件中放入内容,请使用ECHO命令。

echo I want this in the text file>"!str!\file.txt"

MOVE命令之后使用其中两个示例。

答案 1 :(得分:0)

再次感谢您@Squachman。

现在我的代码如下:

@echo off
setlocal enabledelayedexpansion

For /f "delims=" %%G IN ('dir /A-D /B /L *.jpg') DO (
set "str=%%~nG"
set "str= !str: =-!"
call :toLower str
MD "!str!"
move "%%~G" "!str!\"
type nul>"!str!\file.txt"
echo title: %%~nG>"!str!\file.txt"
)

GOTO :EOF
:toLower str -- converts uppercase character to lowercase
::           -- str [in,out] - valref of string variable to be converted
:$created 20060101 :$changed 20080219 :$categories StringManipulation
:$source https://www.dostips.com
if not defined %~1 EXIT /b
for %%a in ("A=a" "B=b" "C=c" "D=d" "E=e" "F=f" "G=g" "H=h" "I=i"
        "J=j" "K=k" "L=l" "M=m" "N=n" "O=o" "P=p" "Q=q" "R=r"
        "S=s" "T=t" "U=u" "V=v" "W=w" "X=x" "Y=y" "Z=z" "Ä=ä"
        "Ö=ö" "Ü=ü") do (
call set "%~1=%%%~1:%%~a%%"
)
EXIT /b

现在,我需要将.txt文件中添加的文本小写

我接受考试,很高兴学到很多东西;-)