批量移动文件基于部分文件名 - Windows 8

时间:2015-01-03 12:01:55

标签: batch-file batch-processing

我有很多文件,我试图为我的博士研究进行整理。我不熟悉使用批处理文件,但我确实有一些编码经验。

我尝试将基于文件名部分文件的文件移动到他们当前所在目录中自动生成的文件夹中。

这些文件是作为对博物馆举行的黄铜物品进行的一系列pXRF分析的一部分而生成的。

文件结构的一些示例:

  • 01-64.1007-1-LID.pdz
  • 01-64.1007-2-BASE.pdz
  • 02-67.1765-1.pdz
  • 02-67.1765-2.pdz
  • 02-67.1765-3.pdz

基本上文件结构的工作原理如下:

第一个数字是我对象的唯一标识符,然后是连字符,然后是博物馆的唯一标识符,然后是连字符,然后是一个数字来显示对象的哪个分析。最后,可能有或没有一个小的描述符(即BASE或LID),它可以帮助我识别我执行扫描的位置。

所以要将其分解01-64.1007-1-LID表示对象1 - 博物馆登记号64.1007 - 第一次分析 - 在对象的盖子上执行 - .pdz是文件扩展名。

02-67.1765-2表示对象2 - 博物馆登记号67.1765 - 第二次分析等。

我想做的是搬家:

  • 01-64.1007-1-LID.pdz
  • 01-64.1007-2-BASE.pdz

进入名为:

的文件夹
  • 01-64.1007

  • 02-67.1765-1.pdz
  • 02-67.1765-2.pdz
  • 02-67.1765-3.pdz

进入名为:

的文件夹
  • 02-67.1765

我已经看过一些可能对此有帮助的脚本,但我不确定如何根据我的目的调整它们。如果有人可以提供帮助,我真的很感激!

谢谢,

迈克

2 个答案:

答案 0 :(得分:1)

在示例文件的文件夹中测试此批处理文件:将其命名为movepdz.bat,这样名称就不会与其他可执行文件冲突。

@echo off
for %%a in (*.pdz) do (
   echo processing "%%a"
      for /f "tokens=1,2 delims=-" %%b in ("%%~nxa") do (
         md "%%b-%%c" 2>nul
         move "%%a" "%%b-%%c" >nul
      )
)
pause

答案 1 :(得分:0)

如果你真的是指bash脚本,你可以使用这样的东西:

for file in *.pdz; do
  dir=${echo "$file"|cut -d- -f -2}
  mkdir -p "$dir"
  mv "$file" "$dir"
done

cut命令将删除第二个连字符之前的部分以确定目录名称。然后我们创建目录,以防它不存在。最后只需将文件移动到该目录中即可。

更新:感谢您澄清您的环境。 (我确定之前的问题提到了bash ...) - 如果你想使用这个解决方案,你可以安装git,它带有一个很好的git-bash。