0

这是此问题中描述的“展平”操作的逆操作:展平目录

我想要一个批处理脚本,它将遍历“扁平”目录中的每个文件并将它们放回其原始目录,并根据需要创建目录

因此,如果以下文件在我的文件夹中:

images-nature-dcim001.jpg
images-nature-dcim002.jpg
images-dcim003.jpg
images-indoors-dcim004.jpg

它将生成生成的目录结构,创建目录并将文件移动(或复制)到正确的文件夹中。

images
  dcim003.jpg
  nature
    dcim001.jpg
    dcim002.jpg
  indoors
    dcim004.jpg

注意:该示例使用连字符来分隔目录,但它们可以是任何字符。

4

3 回答 3

2
@ECHO OFF &SETLOCAL
FOR /f "delims=" %%a IN ("%cd%") DO SET "precur=%%~dpa"
FOR /f "delims=" %%a IN ('dir /b /s /a-d *.txt') DO (
    SET "fname=%%~fa"
    SETLOCAL ENABLEDELAYEDEXPANSION
    SET "nname=!fname:%precur%=!"
    SET "nname=!nname:\=-!"
    ECHO REN "!fname!" "!nname!"
    ENDLOCAL
)
于 2013-08-11T06:50:41.863 回答
2

这在这里有效。它在顶部创建四个文件,然后移动它们。

@echo off
type nul >images-nature-dcim001.jpg
type nul >images-nature-dcim002.jpg
type nul >images-dcim003.jpg
type nul >images-indoors-dcim004.jpg

for %%a in (*.jpg) do call :routine "%%a"
pause
goto :eof
:routine
set "a=%~1"
set "b=%a:-=\%"
for %%b in ("%b%") do (
md "%%~pb" 2>nul
move "%a%" "%%~pb\%%~nxb"
)
于 2013-08-11T16:00:48.210 回答
0

这是我使用的基于 foxidrive 获取目录名称的方法的版本。我没想过简单地用反斜杠替换定界符。

@echo off
Setlocal EnableDelayedExpansion
rem // Directory Unflatten
rem //   recursively unflattens directories
rem //   and prepends the directory name to
rem //   the filename

rem // Configuration options
rem // * Files to search for
set pattern=*jpg;*.png  
rem // * Directory name delimiter
set delim=-

rem // Perform moving
for %%X in (%pattern%) do (
  set A=%%X

  rem // Replace delimiter with back-slash
  set b=!A:%delim%=\!

  rem // Not sure how to clean this up
  for %%B in ("!b!") do (
    if not exist %%~pB (
      md "%%~dpB"
    )
    move "!A!" "%%~dpB%%~nxB"
  )
)
于 2013-08-11T21:16:09.870 回答