新代码仍然不起作用:(请帮我修复这个问题
@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
命令和运算符进行重定向&&
:||
- 使用这种简单的方法列出文件:
for %%i in (*.pdf)do...
- 使用将输出重定向到命令的命令检查文件是否
%%i
在您的文件中:log.txt
type
find /i "%%~i"
type "log.txt"| find /i "%%~i"...
- 使用运算符(条件执行)
&&
and||
,对于 if match/-not-match dodel file.pdf
orecho file.pdf
:
&& del/Q "%%F" || echo/"%%~i">>log.txt