递归地将所有文件移动到一个上层目录

时间:2013-04-13 09:43:52

标签: file shell directory cmd rename

以下是问题:

  1. 我有一个文件夹,比方说C:\myFolder,在这个目录中,我有很多子文件夹,在每个子文件夹中,我只有一个文件夹,包含pdf文件,所以我的文件结构看起来像这样:C:\myFolder\someFolderInMyFolder\theOnlyFolderInThisFolder\*.pdf,现在我想将所有这些pdf向上移动一级,这样它就像这样:C:\myFolder\someFolderInMyFolder\*.pdf。是否有任何命令行命令或脚本(可由Cygwin执行)对我有帮助?

    可能使情况复杂化的是,我自己手动将一些文件移动一级,因此如果有检查条件,它会有所帮助。

  2. 我有一些.zip个名称由计算机生成的文件,格式为mm/dd/yy/fileIndex.zip,而fileIndex就像No.001。当我将提取的文件夹上传到Dropbox,并在我的iPad上查看文件时,它看起来很奇怪,因为无法完整显示完整的文件夹名称,因此我想将每个文件夹重命名为someIndex,在上面的示例中,从No.001001,同样的问题在这里:任何命令或shell脚本?

1 个答案:

答案 0 :(得分:1)

您可以使用@Endoro建议的略微修改版本将所有PDF上移一级:

@echo off

for /r "C:\myFolder" %%f in (*.pdf) do move "%%~ff" "%%~dpi.."

但是,脚本没有通用的方法来区分已经移动的文件和尚未移动的文件。如果你解开手动动作可能是最好的。否则,您必须找到一些区别特征,或者根据名称列表检查每个名称,例如: like this

您可以重命名这样的文件:

@echo off

setlocal EnableDelayedExpansion

for /r "C:\myFolder" %%f in (No.*.zip) do (
  set name=%%~nxf
  set name=!name:No.=!
  ren "%%~ff" "!name!"
)

endlocal

FTR,我在某种程度上怀疑你的文件名是mm/dd/yy/fileIndex.zip。正斜杠不是Windows中文件名的有效字符。