基于文件夹名称标识文件的批处理文件

时间:2017-01-26 01:35:31

标签: batch-file for-loop directory filenames

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

0 e:\..jpg   
1 e:\front.jpg
2 e:\back.jpg
3 e:\10_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文件
  • 包括字符串" front" (文件1,3)或
  • 完全命名为"。" .jpg(文件0)或
  • 其名称(不带扩展名)与存储在其中的目录名称完全匹配(文件4,8)

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

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

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

3 个答案:

答案 0 :(得分:0)

@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

不知道它是否有效。

答案 1 :(得分:0)

@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

这对我说明了两个文件。正如预期的那样,它检测到但是非ANSI文件名受损。

答案 2 :(得分:0)

项目 1 的模式*..jpg*..jpeg匹配名称可能包含..之前的内容的文件,这不是您想要的,只要我明白。我会改为使用单一模式..jp??

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

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

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
    )
)