1

我有这个:

>upperFolder
  >folder 0
    >file 0
    >file ...
    >file n
  >...
  >foldern
    >file 0
    >file ...
    >file n

...我想要这个

>upperFolder
  >folder 0_file 0
  >folder 0_file ...
  >folder 0_file n
  >...
  >folder n_file 0
  >folder n_file ...
  >folder n_file n

例如:

我有这个:

>Pictures
  >Wallpapers
    >Reaper
    >Skull
    >Night
  >Avatars
    >InuYasha
    >Battler
    >Valentino

...我想要这个

>Pictures
  >Wallpapers_Reaper
  >Wallpapers_Skull
  >Wallpapers_Night
  >Avatars_InuYasha
  >Avatars_Battler
  >Avatars_Valentino

我需要这个来重命名 Windows cmd 中的大量文件。手动完成这一切变得越来越困难。提前致谢。

4

3 回答 3

2

如果您只需要将文件移动一层深,那么以下命令将从命令行运行:

for /d %D in (*) do @for %F in ("%D\*") do @move "%F" "%D_%~nxF" >nul

如果要在批处理脚本中运行命令,则将所有百分比加倍。

如果您确实想以递归方式将层次结构中的所有文件移动到父文件夹,那么以下批处理脚本将起作用:

for /f "eol=: delims=" %%D in ('dir /b /s /ad *^|sort /r') do (
  pushd "%%D"
  for %%F in (*) do move "%%F" "..\%%~nxD_%%F" >nul
  popd
)

所以像这样的目录结构

>Pictures
  moveFiles.bat
  pic1.jpg
  pic2.jpg
  >Avatars
    Battler.jpg
    InuYasha.jpg
    Valentino.jpg
  >Wallpapers
    pic1.jpg
    pic2.jpg
    >Nature
      Forest.jpg
      Ocean.jpg
    >Sports
      Baseball.jpg
      Basketball.jpg
      Football.jpg

变成:

>Pictures
  Avatars_Battler.jpg
  Avatars_InuYasha.jpg
  Avatars_Valentino.jpg
  moveFiles.bat
  pic1.jpg
  pic2.jpg
  Wallpapers_Nature_Forest.jpg
  Wallpapers_Nature_Ocean.jpg
  Wallpapers_pic1.jpg
  Wallpapers_pic2.jpg
  Wallpapers_Sports_Baseball.jpg
  Wallpapers_Sports_Basketball.jpg
  Wallpapers_Sports_Football.jpg
  >Avatars
  >Wallpapers
    >Nature
    >Sports
于 2013-06-06T22:18:59.037 回答
1

试试这个,看看输出并删除echo之前的move,如果可以的话:

@echo off&setlocal
set "startfolder=X:\path\upperFolder"
cd /d "%startfolder%"
for /d %%i in (*) do (
    for %%j in ("%%~i\*") do (
        if not exist "%startfolder%\%%~i_%%~nxj" (
        echo move "%%~fj" "%startfolder%\%%~i_%%~nxj"
        ) else echo ERROR: "%startfolder%\%%~i_%%~nxj" already exist.
    )
)

输入:

C:\UPPERFOLDER
├───文件夹1
│ 文件11
│ 文件12
│ 文件13
│ 文件14
│ 文件15
│ 文件16
│ 文件17
│ 文件18
│ 文件19
│
├───文件夹2
│ 文件21
│ 文件22
│ 文件23
│ File24
│ 文件25
│ 文件26
│ 文件27
│ 文件28
│ 文件29
│
├───文件夹3
│ 文件31
│ 文件32
│ 文件33
│ 文件34
│ 文件35
│ 文件36
│ 文件37
│ 文件38
│ 文件39
│
├───文件夹4
│ 文件41
│ File42
│ 文件43
│ File44
│ File45
│ File46
│ 文件47
│ File48
│ File49
│
├───文件夹5
│ 文件51
│ File52
│ 文件53
│ File54
│ 文件55
│ 文件56
│ 文件57
│ 文件58
│ 文件59
│
├───文件夹6
│ 文件61
│ 文件62
│ 文件63
│ File64
│ 文件65
│ 文件66
│ 文件67
│ 文件68
│ 文件69
│
├───文件夹7
│ 文件71
│ 文件72
│ 文件73
│ 文件74
│ 文件75
│ 文件76
│ 文件77
│ 文件78
│ 文件79
│
├───文件夹8
│ 文件81
│ 文件82
│ 文件83
│ 文件84
│ 文件85
│ 文件86
│ 文件87
│ 文件88
│ 文件89
│
└────文件夹9
        文件 91
        文件 92
        文件 93
        文件 94
        文件 95
        文件 96
        文件 97
        文件 98
        文件 99

..输出:

C:\UPPERFOLDER
│ Folder1_File11
│ Folder1_File12
│ Folder1_File13
│ Folder1_File14
│ Folder1_File15
│ Folder1_File16
│ Folder1_File17
│ Folder1_File18
│ Folder1_File19
│ Folder2_File21
│ Folder2_File22
│ Folder2_File23
│ Folder2_File24
│ Folder2_File25
│ Folder2_File26
│ Folder2_File27
│ Folder2_File28
│ Folder2_File29
│ Folder3_File31
│ Folder3_File32
│ Folder3_File33
│ Folder3_File34
│ Folder3_File35
│ Folder3_File36
│ Folder3_File37
│ Folder3_File38
│ Folder3_File39
│ Folder4_File41
│ Folder4_File42
│ Folder4_File43
│ Folder4_File44
│ Folder4_File45
│ Folder4_File46
│ Folder4_File47
│ Folder4_File48
│ Folder4_File49
│ Folder5_File51
│ Folder5_File52
│ Folder5_File53
│ Folder5_File54
│ Folder5_File55
│ Folder5_File56
│ Folder5_File57
│ Folder5_File58
│ Folder5_File59
│ Folder6_File61
│ Folder6_File62
│ Folder6_File63
│ Folder6_File64
│ Folder6_File65
│ Folder6_File66
│ Folder6_File67
│ Folder6_File68
│ Folder6_File69
│ Folder7_File71
│ Folder7_File72
│ Folder7_File73
│ Folder7_File74
│ Folder7_File75
│ Folder7_File76
│ Folder7_File77
│ Folder7_File78
│ Folder7_File79
│ Folder8_File81
│ Folder8_File82
│ Folder8_File83
│ Folder8_File84
│ Folder8_File85
│ Folder8_File86
│ Folder8_File87
│ Folder8_File88
│ Folder8_File89
│ Folder9_File91
│ Folder9_File92
│ Folder9_File93
│ Folder9_File94
│ Folder9_File95
│ Folder9_File96
│ Folder9_File97
│ Folder9_File98
│ Folder9_File99
│
├───文件夹1
├───文件夹2
├───文件夹3
├───文件夹4
├───文件夹5
├───文件夹6
├───文件夹7
├───文件夹8
└────文件夹9
于 2013-06-06T22:33:08.373 回答
0

这在 Windows 上有点棘手;)

但是您可以通过以下方式进行操作:

在应“扫描”的文件夹外创建 2 个批处理文件,第一个应命名为 findfiles.bat

forfiles /p %1 /s /c "cmd /c if @isdir==FALSE %~p0\renameit.bat @relpath @file %1 %~p0\"

第二个应该命名为 renameit.bat

@echo off
set oldname=%1
set oldname=%oldname:.\=%
set oldname=%oldname:"=%
set tmpname=%2
set newname=%oldname:\=_%
set newname=%newname:"=%

move "%4%3\%oldname%" "%4%3\%newname%"

现在您可以使用主文件夹作为参数执行 findfiles.bat。(所以在你的例子中:图片)

因此,例如,如果您的图片文件夹位于 D:\ 中,则在 D:\ 中创建 2 个批处理文件,然后转到 cmd 并执行findfiles.bat Pictures

不过要小心!尝试先在您的真实文件夹的副本上执行此操作!我不想成为你丢失照片或其他任何事情的责任人;)

唯一的缺点是您最终会得到从中移动文件的空文件夹,但我认为这是可以忍受的:)

于 2013-06-06T21:58:12.957 回答