根据文件夹名称识别文件的批处理文件
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 文件
- 包括字符串 "front"(文件 1,3)或
- 准确命名为“..jpg(文件 0),或
- 其名称(不带扩展名)与它们存储的目录名称完全匹配(文件 4,8)
我认为 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。
所以为了涵盖项目 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
)
)
我有一个大文件夹,其中包含多个子文件夹,每个子文件夹包含多个 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 文件
- 包括字符串 "front"(文件 1,3)或
- 准确命名为“..jpg(文件 0),或
- 其名称(不带扩展名)与它们存储的目录名称完全匹配(文件 4,8)
我认为 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。
所以为了涵盖项目 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
)
)