我怎样才能“反转”目录结构?

我怎样才能“反转”目录结构?

我使用了一个图像处理工具,它可以将同一张图片的不同大小批量输出到目录形式:

<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

我不懂批处理脚本,但这可能是您想要使用的一般程序:

  1. 为每个尺寸文件夹创建一个外部文件夹。
  2. 将每个大小文件夹移动到外部目录,并将其重命名为其父目录的名称(特定目录名称)。

嗯...我想就是这样了。目前还不算太复杂。

相关内容