根据文件夹名称识别文件的批处理文件

Batch file that identfies files based on its folder name

我有一个大文件夹,其中包含多个子文件夹,每个子文件夹包含多个 jpg/jpeg 文件。例如,

0 e:\..jpg   
1 e:\front.jpg
2 e:\back.jpg
3 e:_40\apopfront.jpg
4 e:\Dominatrix\Dominatrix.jpg
5 e:\# Herr Fuchs & Frau Elster\Feel Musik 8.jpg
6 e:\# Herr Fuchs & Frau Elster\Immer für Immer.jpg
7 e:\# Herr Fuchs & Frau Elster\Märchentanz - Liebe und Strand.jpg
8 e:\# Herr Fuchs & Frau Elster\# Herr Fuchs & Frau Elster.jpg

我正在寻找 windows 批处理脚本来识别那些 jpg 文件

我认为 a 为前两个条件找到了合适的解决方案(将目录绘制到批处理脚本上):

set Exts="*front*.jpg","*front*.jpeg","*..jpg","*..jpeg"
for /r . %%g in (%Exts%) do  ...

但是我没有办法将第三个条件也实现到该循环中。有简单的方法吗?任何帮助表示赞赏。 谢谢

@echo off
set "ndir=%CD%
setlocal enableDelayedExpansion
for %%a in (*.jpg) do (
set "filename=%%~nxF"
echo !filename!|findstr /c:"front" >nul
if "%errorlevel%" == "0" echo found file: !!a
echo !filename!|findstr /c:"..jpg" >nul
if "%errorlevel%" == "0" echo found file: !!a
set "filename:-4"
cd ..\
cd %CD%\!filename!
if "%errorlevel%" == "0" echo found file: !!a
cd !ndir!
set "filename:-1"
cd ..\
cd %CD%!filename!
if %%errorlevek%" == "0" echo found file: !!a
pause >nul

不知道行不行

@ECHO OFF
SETLOCAL
SET "sourcedir=U:\sourcedir"

FOR /f "tokens=1*delims=" %%a IN (
 'dir /b /s /ad "%sourcedir%\*" '
 ) DO (
 IF EXIST "%%a\%%~nxa.jpg" ECHO found "%%a\%%~nxa.jpg"
)

GOTO :EOF

这对我指定的两个文件有效。正如预期的那样,它检测到但损坏了 non-ANSI 个文件名。

1 的模式 *..jpg*..jpeg 匹配名称可能包含 .. 之前内容的文件,这不是您想要的想要,据我了解。我会改用单一模式 ..jp??

类似地,我也会使用一种模式 *front*.jp?? 来覆盖项目 2

所以为了涵盖项目 12,我会使用:

for /R "E:\" %%G in ("*front*.jp??","..jp??") do echo %%~G

对于项目 3,您可以使用以下内容:

for /R "E:\" %%G in ("*.jp??") do (
    for %%H in ("%%~dpG.") do (
        if "%%~nxH"=="%%~nG" echo %%~G
    )
)