我使用了一个图像处理工具,它可以将同一张图片的不同大小批量输出到目录形式:
<specific directory>\<image size name>
e.g. SuperBowl\Fullsize JPEG
我想定期反转此操作并将子文件夹中的所有文件移动到新位置,即:
<image size name>\<specific directory>
e.g. Fullsize JPEG\SuperBowl
我设想针对该Superbowl
文件夹运行该操作。是否有可用的简单工具可以执行此操作,或者 Windows .bat 或 Linux bash 脚本?
答案1
我认为这样的事情应该可行:
for /d %x in (*) do for /d %y in ("%x\*") do md "%~ny"
for /d %x in (*) do for /d %y in ("%x\*") do md "%~ny\%x"
for /d %x in (*) do for /d %y in ("%x\*") do move "%x\%~ny\*" "%~ny\%x"
前两行创建倒排目录集,第三行移动所有内容。如果将其放入批处理文件中,则需要将 % 字符加倍。
非常确定您不需要第一行,因为 MKDIR 似乎会自动创建中间目录,但我不知道这样做了多久。
答案2
Hafthor 的第二行和第三行几乎足够了,但我希望能够指定一个目录,因此将它们修改为:
for /d %%x in ("%1") do for /d %%y in ("%%x\*") do md "%%~ny\%%x"
for /d %%x in ("%1") do for /d %%y in ("%%x\*") do move "%%x\%%~ny\*" "%%~ny\%%x"
实际上,我更进一步开发了以下脚本 - 对于可能发生的任何奇怪/不必要的文件删除,我概不负责;风险自负:
@echo off
if [%1]==[] goto noparameter
if "%1"=="*" goto nowildcards
if "%1"=="/?" goto help
if not exist %1 (
echo The directory does not exist.
goto exit
)
echo.
echo Creating new directories...
for /d %%x in ("%1") do for /d %%y in ("%%x\*") do md "%%~ny\%%x"
echo.
echo Moving files...
for /d %%x in ("%1") do for /d %%y in ("%%x\*") do move "%%x\%%~ny\*" "%%~ny\%%x"
echo.
echo Files were flipped for directory %1; this directory now contains (should be empty):
dir %1 /S /B
echo.
echo =======================================================================
echo The previous (sure it's empty?) directory structure will now be deleted
echo.
if "%2"=="/F" (
echo Deletion forced
rmdir %1 /S /Q
) else (
rmdir %1 /S
)
goto exit
:noparameter
echo You must specify a directory to flip.
goto exit
:nowildcards
echo You cannot use a wildcard (asterisk) with this script.
goto exit
:help
echo Takes directory structure a/b and converts it to b/a, moving any files within.
echo Works only with a single directory when you are within its parent.
echo.
echo FLIP [directory] [/F]
echo.
echo. /F Force deletion of directory structure without prompt
goto exit
:exit
答案3
我不懂批处理脚本,但这可能是您想要使用的一般程序:
- 为每个尺寸文件夹创建一个外部文件夹。
- 将每个大小文件夹移动到外部目录,并将其重命名为其父目录的名称(特定目录名称)。
嗯...我想就是这样了。目前还不算太复杂。