.bat 文件 - TXT 记录下载的文件,如果重复,则删除

.bat 文件 - TXT 记录下载的文件,如果重复,则删除

新代码仍然不起作用:(请帮我修复这个问题

@ECHO OFF 
SETLOCAL ENABLEDELAYEDEXPANSION

SET "SEARCH_DIR=%~dp0FILES"

FOR /F "tokens=*" "%%a" IN (log.txt) DO (
    FOR /R "%SEARCH_DIR%" %%f IN (*%%a*) DO (
        if "%%f"="%%a" do del /Q "%%f"
else "%%f" >> log.txt

    )
)
pause

我需要一行脚本的帮助来检查重复文件。目前我有:

set "path=C:\cygwin64\bin;%path%"
lynx -dump -nonumbers https://XXXXXXXXX.com/mypdf/ | grep https://XXXXXX.com/pdf >> links.txt
set "path=C:\cygwin64\bin;%path%"
wget -nd --content-disposition --trust-server-names -i links.txt -P .\PDF\

从网站下载文件后 1.pdf 2.pdf 3.pdf

脚本应按如下方式运行:对于下载的文件,如果文件与 log.txt 中保存的文件不同(按名称 .pdf),则在 log.txt 中添加其名称,否则删除文件 请帮我想出如何写。我认为应该部分

pushd "%~dp0PDF"
FOR /F eol^=^ delims^= %%F in ('2^>nul dir /b "*.pdf"^|findstr something something in log.txt ... do del /Q "%%F" 
if not >> log.txt 

答案1

一些使用for变量替换的选项:

    %%~i   - expands %%i removing any surrounding quotes (")
    %%~fi  - expands %%i to a fully qualified path name only
    %%~ni  - expands %%i to a file name only
    %%~xi  - expands %%i to a file extension only

    %%~nxi => expands %%~i to a file name and extension
  • 使用find/i"%%~i""%%~fi"
  pushd "%~dp0PDF" 
  for %%i in (*.pdf)do type "log.txt" | find/i "%%~i">nul && del/q "%%~fi" || echo/"%%~i">>log.txt 
  • 使用find/i"%%~nxi"
  pushd "%~dp0PDF" 
  for %%i in (*.pdf)do type "log.txt" | find/i "%%~nxi">nul && del/q "%%~i" || echo/"%%~nxi">>log.txt 
  • 无需使用pushd和使用"%%~nxi"%%~fi
   for %%i in ("%~dp0pdf\*.pdf")do type "%~dp0PDF\log.txt" | find /i "%%~nxi">nul && del/q ""%~dp0pdf\%%~fi" || echo\"%%~nxi">>"%~dp0PDF\log.txt" 
  • 不使用pushd和使用findstr /ilc:和“%%~nxi”
  for %%i in ("%~dp0pdf\*.pdf"
  )do type "%~dp0PDF\log.txt" | findstr /ilc:"%%~nxi" >nul && (
  del/q "%~dp0pdf\%%~nxi") || echo\"%%~nxi">>"%~dp0PDF\log.txt"

您可以在循环中使用find命令和运算符进行重定向&&||

  1. 使用这种简单的方法列出文件:
   for %%i in (*.pdf)do...
  1. 使用将输出重定向到命令的命令检查文件是否%%i在您的文件中:log.txttypefind /i "%%~i"
   type "log.txt"| find /i "%%~i"...
  1. 使用运算符(条件执行)&&and ||,对于 if match/-not-match do del file.pdfor echo file.pdf
   && del/Q "%%F" || echo/"%%~i">>log.txt

相关内容