windows - 如何从批处理文件中的特定文件夹及其子文件夹中查找名称不带下划线的所有 jpeg 文件,然后重命名
问题描述
我有以下脚本,它获取位于子文件夹 IN 中的所有 .jpg 或 .png 类型的文件,并将其重命名为 IN 上一层的文件夹名称,该文件夹名称以代理编号命名。
例如,有这个路径\\servername\SECH\DATA\CLI\45\IN\image504.jpeg
,它应该将它重命名为45_image504.jpeg
.
我想使用 for /R 因为我希望它只在 CLI 的子文件夹中查看,除非有另一种方法可以传递位置以在 for 循环中搜索。我想知道如何改进此脚本以查找名称中没有下划线的 jpg 文件。
For /R \\servername\CLI\ %%a in (*.jpg *.png) DO ( echo filename %%~nxa For %%g in (%%a\..) do (
SET LAST_FOLDER=%%~nxg
If "!LAST_FOLDER!" == "IN" (
FOR %%V IN (%%a\..\..) DO (
SET FOLDER_NAME=%%~nxV
SET CURRENT_FILE_NAME=%%~nxa
SET PREFIX=!FOLDER_NAME!_
echo FOLDER_NAME : !FOLDER_NAME!
echo CURRENT_FILE_NAME : !CURRENT_FILE_NAME!
If "!CURRENT_FILE_NAME:~0,4!" == "!PREFIX!" (
echo filename exists
) Else (
Rename "%%~a" "!FOLDER_NAME!_%%~nxa"
)
)
)
) )
解决方案
由于目标文件位于某个目录层次结构深度中,因此您可能不应该递归搜索它们以避免意外匹配。
因此我会这样做:
@echo off
setlocal EnableExtensions DisableDelayedExpansion
rem // Define constants here:
set "_ROOT=\\servername\SECH\DATA\CLI" & rem // (full path to target dir.)
set "_SDIR=IN" & rem // (name of sub-sub-directory)
set "_VSTR=_" & rem // (separator char. or string)
set _MASKS="*.jpg" "*.jpeg" "*.jpe" "*.png" & rem // (list of quoted patterns)
rem // Change into target directory:
pushd "%_ROOT%" && (
rem // Loop through immediate sub-directories:
for /D %%E in ("*") do (
rem // Change into sub-sub-directory:
pushd "%%~E\%_SDIR%" 2> nul && (
rem // Loop through matching files, excluding those with separator:
for /F "delims= eol=|" %%F in ('
dir /B /A:-D-H-S %_MASK% ^| findstr /V /I /C:"%_VSTR%"
') do (
rem // Actually rename the current file:
ren "%%F" "%%~nxE%_VSTR%%%F"
)
rem // Return from sub-sub-directory:
popd
)
)
rem // Return from target directory:
popd
)
endlocal
exit /B
推荐阅读
- javascript - 如何在html中获取数组中的两个条目?
- python - 为什么这个反转整数的代码打印'inf'?
- azure-aks - azure-kubernetes-service 在 webconsole 上创建失败
- node.js - 在没有“id”字段的弹性搜索中更新文档的其他方法
- angular - 无法在 Angular 中读取 null 的属性
- python - 尝试创建筛选时出错 - 模块没有属性 - Python
- python - 如何导出excel文件的特定区域并将其导入另一个excel文件?
- android - 使用底部导航栏更改片段后的片段丢失数据
- python - Matplotlib 绘制绘图两次,但 plt.plot 只调用一次?
- python - 如何在文本文件中专门加入两个不同的行?