当名称与 txt 文件中的字符串部分不对应时删除文件 - Windows 批处理

当名称与 txt 文件中的字符串部分不对应时删除文件 - Windows 批处理

有一个 txt 文件,其中包含(以及许多其他)以以下内容开头的字符串:

“HH:MM:SS 案例”

其中 H、M、S 分别表示小时、分钟和秒(24 小时制)。

有.jpg 文件,名称为 HHMMSS.jpg 或 HHMMSSxy.jpg(其中 x、y 是数字和/或字母)。

如何删除所有 HHMMSS*.jpg 文件,这些文件的名称与 .txt 文件中的字符串“HH:MM:SS case”不对应?我可以轻松在 .txt 文件中找到所有现有的“HH:MM:SS case”字符串,但不知道下一步该怎么做。

dos 批处理将在 XP 机器上使用。

PS 亲爱的朋友们,我对脚本一无所知。这不是我的专长。我知道你们不是“脚本公司”,但我希望这对了解脚本的人来说非常简单。

我做了什么。

我可以通过以下方式找到所有这些字符串: findstr /r /c:"..:..:.. case"

我可以将它们放入另一个 .txt 文件中,方法是在末尾添加:> file.txt

我尝试使用“for”命令的几个代码,但是语法对我来说太复杂了。

我知道如何将 HH:MM:SS 转换为 HHMMSS(并使用它们创建另一个 txt 文件)。

我找到了一些根据 txt 文件中的列表从目录中删除文件的代码。

但我觉得这种方法很粗糙。

答案1

当名称与 txt 中的部分字符串不对应时删除文件 文件-Windows批处理

我可以通过以下方式找到所有这些字符串: findstr /r /c:"..:..:.. case"

我可以将它们放入另一个 .txt 文件中,方法是在末尾添加:> file.txt

我尝试使用“for”命令的几个代码,但是语法对我来说太复杂了。

我整理了一个为/F循环使用此file.txt字符串来迭代该文件内容的值,以复制字符串(作为文件名).jpg暂时附加在其他地方(最初它删除了这些)—这是您确认有效并从我的评论建议中迭代删除命令的操作。

你的评论

它会删除 txt 文件中的 jpg 文件。现在,我不想删除这些文件,而是删除所有其他文件

字符串列表不断迭代,所以我不知道如何容易地添加批处理脚本如果逻辑并说删除这个文件(逐一)如果不等于任何文件名字符串列表中的字符串值(这里不能单独进行)—但我确信 PowerShell 将会是另一回事。

因此,复制到临时工作目录的方法似乎运行良好,所以测试它,看看它是如何运行的,但是当我运行它几次时,它按照我在示例批处理脚本中的逻辑预期的方式工作,以获得最终和预期的结果,正如您通过原始问题和之后的评论所解释的那样。

请注意需要将其作为.bat.cmd文件运行,而不是手动复制并粘贴到命令提示符中,因为称呼此方法需要命令。


批处理脚本示例

@ECHO ON

SET SourcePath=C:\Path
SET WorkPath=C:\Path\TempWork

IF NOT EXIST "%WorkPath%" MD "%WorkPath%"
IF EXIST "%WorkPath%\*.jpg" DEL /Q /F "%WorkPath%\*.jpg"

FOR /F "TOKENS=*" %%A IN (

    C:\Path\file.txt

) DO (

    CALL :Routine1 "%%~NXA.jpg"

)

DEL /Q /F  "%SourcePath%\*.jpg"
XCOPY /F /Y "%WorkPath%\*.jpg" "%SourcePath%\"
IF EXIST "%WorkPath%\*.jpg" DEL /Q /F "%WorkPath%\*.jpg"
GOTO EOF

:Routine1 
XCOPY /F /Y "%SourcePath%\%~1" "%WorkPath%\"
GOTO EOF

脚本说明/陷阱:

  • 您可以只使用带有字符串值的文件的文件名(file.txt),也可以使用完整路径。请确保不要在其周围加上双引号,否则它不会读取文件内容值。这可能意味着,如果您使用完整路径而不是隐式文件名,那么file.txt该路径包括任何文件夹名称和文件名一定不包含任意空格。
  • 确保SET SourcePath=C:\Path等于有效的文件路径(这里有或没有空格都可以),其中存在您要保留的文件(源路径)。
  • 确保SET WorkPath=C:\Path\TempWork等于有效的文件路径(这里有或没有空格都可以),您要保留的文件将被临时复制到该路径,直到其他文件被删除,然后再复制回原始源路径。
  • 您需要确保执行此批处理脚本的安全上下文具有对所有适用文件和文件夹的适当访问权限,以成功处理所有命令批处理逻辑操作。

答案2

好的,花了点时间,但现在它起作用了。它是为右键单击文件夹而制作的(我在注册表中创建了右键单击菜单)。

cls
@ECHO OFF
setlocal enabledelayedexpansion

SET SourcePath=%1
SET WorkPath=%SourcePath%\TempWork

CD /D %SourcePath%

IF NOT EXIST "%WorkPath%" MD "%WorkPath%"
IF EXIST "%WorkPath%\*.bmp" DEL /Q /F "%WorkPath%\*.bmp"
XCOPY /F /Y "%SourcePath%\*mask*.bmp" "%WorkPath%\"


IF EXIST RawList.txt DO DEL RawList.txt
IF EXIST List.txt DO DEL List.txt

for /f "delims=" %%A in ('cd') do set foldername=%%~nxA

FINDSTR /r /c:"..:..:.. case"  %foldername%.log > RawList.txt


for /f  "delims=" %%a in (RawList.txt) do (
set str=%%a
set str=!str::=!
set str=!str:~0,6!
echo !str!
) >> List.txt



FOR /F "TOKENS=*" %%A IN (

List.txt

) DO (

CALL :Routine1 "%%~NXA*.bmp"

)

DEL /Q /F  "%SourcePath%\*.bmp"

XCOPY /F /Y "%WorkPath%\*.bmp" "%SourcePath%\"
IF EXIST "%WorkPath%\*.bmp" DEL /Q /F "%WorkPath%\*.bmp"

RD /Q /S %WorkPath%

DEL /Q /F RawList.txt
DEL /Q /F List.txt

GOTO :EOF

:Routine1 
XCOPY /F /Y "%SourcePath%\%~1" "%WorkPath%\"
GOTO :EOF

相关内容