根据部分文件名批量移动文件 - Windows 8
Batch move files based on part of file name - Windows 8
我有很多文件,我正试图为我的博士研究整理这些文件。我不熟悉使用批处理文件,但我确实有一些编码经验。
我正在尝试根据部分文件名将文件移动到为它们当前所在的目录中自动生成的文件夹中。
这些文件是作为对博物馆收藏的黄铜 object 进行的一系列 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
等等
文件结构基本上是这样的:
第一个数字是我对 object 的唯一标识符,然后是连字符,然后是博物馆的唯一标识符,然后是连字符,然后是显示 object 分析的数字。最后,可能有也可能没有一个小的描述符(即 BASE 或 LID)来帮助我确定我在哪里执行扫描。
所以分解 01-64.1007-1-LID 意味着 Object 1 - 博物馆入藏号 64.1007 - 第一次分析 - 在 object 的盖子上进行 - .pdz 是文件扩展。
02-67.1765-2 表示 Object 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
等等
我看过一些可能对此有帮助的脚本,但我不确定如何根据我的目的调整它们。如果有人能提供帮助,我将不胜感激!
谢谢,
麦克
如果你的意思是 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。
在示例文件的文件夹中测试此批处理文件:将其命名为 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
我有很多文件,我正试图为我的博士研究整理这些文件。我不熟悉使用批处理文件,但我确实有一些编码经验。
我正在尝试根据部分文件名将文件移动到为它们当前所在的目录中自动生成的文件夹中。
这些文件是作为对博物馆收藏的黄铜 object 进行的一系列 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
等等
文件结构基本上是这样的:
第一个数字是我对 object 的唯一标识符,然后是连字符,然后是博物馆的唯一标识符,然后是连字符,然后是显示 object 分析的数字。最后,可能有也可能没有一个小的描述符(即 BASE 或 LID)来帮助我确定我在哪里执行扫描。
所以分解 01-64.1007-1-LID 意味着 Object 1 - 博物馆入藏号 64.1007 - 第一次分析 - 在 object 的盖子上进行 - .pdz 是文件扩展。
02-67.1765-2 表示 Object 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
等等
我看过一些可能对此有帮助的脚本,但我不确定如何根据我的目的调整它们。如果有人能提供帮助,我将不胜感激!
谢谢,
麦克
如果你的意思是 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。
在示例文件的文件夹中测试此批处理文件:将其命名为 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