我正在开发一个 ImageJ 宏,目标如下: 1.-打开输入目录。 2.-创建输出目录。 3.-跨多级子文件夹搜索名为“BRIGHT”的目录,预处理这些目录中的TIFF图像,并将其复制到输出目录。
但是,当我运行宏时,它仅在输出目录中创建一个空文件夹,而不执行任何预期操作。脚本似乎无法识别指令或正确执行它们。
下面是我正在使用的宏:
// 选择包含“BRIGHT”图像的文件夹 inputDir = getDirectory("选择你的输入目录"); //
inputDir
存储输入目录的路径
//选择输出目录 outputDir = getDirectory("选择你的输出目录"); //
outputDir
存储输出路径
newFolderName = getString("新文件夹的名称:", "NewFolder");
newDir = 输出目录 + 文件.分隔符 + newFolderName; // newDir
存储输出文件夹的路径
文件.makeDirectory(newDir);
setBatchMode(true); // 批量处理,避免每次操作都更新界面
// 在任何级别搜索 BRIGHT
函数searchAndProcess(inputDir,parentPath){ if (inputDir == null || inputDir.length() == 0) { // 检查目录是否为空 print("无效或空目录。"); 返回; }
fileList1 = getFileList(inputDir); // `fileList1` stores a list of files in the BRIGHT folder
for (i = 0; i < fileList1.length; i++) { // create a loop
currentPath = inputDir + File.separator + fileList1[i]; // stores the full path for each file in `currentPath`
showProgress(i, fileList1.length); // shows a progress bar
if (File.isDirectory(currentPath)) { // check if `currentPath` is a directory
if (matches(fileList1[i], "*BRIGHT*")) {
// Create a subfolder in the destination for this BRIGHT folder
brightSubDir = newDir + File.separator + (parentPath.length() > 0 ? parentPath + "_" : "") + fileList1[i];
if (!File.exists(brightSubDir)) {
File.makeDirectory(brightSubDir);
// List and process the TIFF files in the BRIGHT folder
brightFiles = getFileList(currentPath);
for (j = 0; j < brightFiles.length; j++) {
sourceFile = currentPath + File.separator + brightFiles[j];
if (!File.isDirectory(sourceFile) && endsWith(brightFiles[j], ".tif")) { // pre-processing
open(sourceFile);
run("8-bit");
run("Duplicate...", "duplicate");
saveAs("Tiff", brightSubDir + File.separator + brightFiles[j]);
close(); // Closes the duplicated image
}
}
}
} else { // Recursion: search in subdirectories
newParentPath = (parentPath.length() > 0) ? parentPath + "_" + fileList1[i] : fileList1[i];
searchAndProcess(currentPath, newParentPath);
}
}
}
}
print("TIFF 文件已处理并保存在:" + newDir);
有人成功解决了类似的任务,或者可以提供一些关于问题可能出在哪里的指导吗?
有人成功解决了类似的任务,或者可以提供一些关于问题可能出在哪里的指导吗?
存在多个问题。
如量化所述,
searchAndProcess
未被调用。如果是,您会注意到一些错误。
ImageJ 宏语言中没有
null
。不需要与宏中的null
进行比较,所以可以放弃它。
matches
函数使用正则表达式进行操作,而*BRIGHT*
不是合法的。您可以使用 e。 g。 BRIGHT/
、BRIGHT.
或简单比较。
字符串的长度由
lengthOf(string)
决定。不需要宏中的字符串长度测试,因此您可以删除它们。