Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file 基于部分文件名批量移动文件-Windows 8_Batch File_Batch Processing - Fatal编程技术网

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

Batch file 基于部分文件名批量移动文件-Windows 8,batch-file,batch-processing,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 等等 文件结构基本上是这样工作的:

我有很多文件要整理,以备博士研究之用。我不熟悉使用批处理文件,但我有一些编码经验

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

这些文件是作为一系列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
等等

文件结构基本上是这样工作的:

for file in *.pdz; do
  dir=${echo "$file"|cut -d- -f -2}
  mkdir -p "$dir"
  mv "$file" "$dir"
done
第一个数字是对象的唯一标识符,然后是连字符,然后是唯一标识符,然后是连字符,然后是显示对象分析的数字。最后,可能有,也可能没有一个小的描述符(即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
等等

我已经看到了一些脚本,它们可能有助于实现这一点,但我不确定如何调整它们以达到我的目的。如果有人能帮忙,我会非常感激的

谢谢


Mike

如果您真的是指bash脚本,可以使用以下内容:

for file in *.pdz; do
  dir=${echo "$file"|cut -d- -f -2}
  mkdir -p "$dir"
  mv "$file" "$dir"
done
cut
命令将在第二个连字符之前剪切零件,以确定目录名。然后我们创建目录,以防它还不存在。最后,只需移动该目录中的文件


更新:感谢您澄清您的环境。(我确信bash之前提到的问题…-如果你想使用这个解决方案,你可以安装一个漂亮的git bash。

在一个示例文件文件夹中测试这个批处理文件:将其命名为
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

您想使用类似windows的.bat脚本还是类似linux的.sh脚本?你为什么不使用你已经有经验的语言呢?我想使用一个windows.bat文件-我的编码经验仅限于我的博士学位非常具体的应用程序,通常涉及为应用程序构建插件,编辑或修改其他人提供的代码(相当多的LUA,Qt Creator中用于数据库查看器的一些东西)。我刚刚开始为我正在构建的一个web应用程序学习Ruby on Rails,但那是在很早的时候——我是一名考古学家——不幸的是,我们一般都是勒德分子:pI在这里非常密集——我道歉(长夜——我一直到凌晨3点,从早上8点开始工作)。我将其复制到记事本中,将其保存为.bat文件并运行.bat,对吗?如果这是正确的,它似乎没有做任何不幸的事情。这是bash-不同于批处理。虽然有些命令看起来相同,但语法不同。一般情况下:Windows=批处理,Unix=bash@Stephan,是的,这个问题曾经提到过bash,因此我对这个问题的最初评论以及对这个答案的更新。@michas我的评论是为了向Michael解释差异,因为这对他来说可能并不明显。我应该加上“@Michael”你能给你的答案加一个简短的解释吗。(我通常不是windows批处理人员,尤其是在
(“%~nxa”)
之类的事情上)好吧,这肯定有道理!它正确地移动了文件,但不幸的是,它把文件夹名弄错了。它在第一次炒作而不是第二次炒作时停止了。所以文件夹结构是01、02、03等等。谢谢!我没有注意到第一个连字符-请尝试上面编辑的代码。@michas请询问您需要澄清的方面。现在工作正常。这真是一件美妙的事情——你刚刚帮我节省了大约15个小时的工作时间!谢谢