返回列表 发帖

[文件操作] [已解决]批处理怎样判断一个已修改后缀文件的本质后缀

@echo off&setlocal enabledelayedexpansion
for /f "delims=" %%i in ('dir /b /a-d /s *.jpg *.png') do (set "file=%%~nxi"
if "!file:~-6!" neq ".9.png" (%~dp0cwebp.exe -q 88 "%%i" -o "%%~dpi%%~ni.webp"&del /s/q/f/a "%%i"&cd %%~dpi&ren "%%~ni.webp" "%%~nxi")
)1>nul 2>nul
pauseCOPY
如A.png转成A.webp后删除原A.png,A.webp被改为A.png取代了原先真PNG
能否通过脚本判断该A.png本质还是A.webp 则不再循环处理该A.png

本帖最后由 miqilaosu 于 2019-6-20 09:34 编辑

回复 1# smss


    文件名没变的话,你通过文件名判断就好了啊,%%~ni.png

TOP

本帖最后由 smss 于 2019-6-20 09:47 编辑

回复 2# miqilaosu
能想到的方法是对处理后的PNG加隐藏属性 规避脚本循环

TOP

本帖最后由 miqilaosu 于 2019-6-20 10:47 编辑

回复 3# smss


    处理完的文件后辍名不用PNG和jpg,因为后辍名不同所以不会被查到,这种方法使用的多一些
ren "%%~ni.webp" "%%~nxixy"COPY
比如A.png改成A.pngxy   A.jpg改成A.jpgxy脚本执行结束前在批量改回来
ren *.pngxy *.png
ren *.jpgxy *.jpgCOPY
反正批量改名处理很快
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   还有个笨的方法就是把所有文件加路径读取放到记事本
dir /b /a-d /s *.jpg *.png>png.logCOPY
,然后FOR读取记事本处理,不会出现重复循环

TOP

@echo off&setlocal enabledelayedexpansion
for /f "delims=" %%i in ('dir /b /ad /a-h /s *.jpg *.png') do (set "file=%%~nxi"
if "!file:~-6!" neq ".9.png" (%~dp0cwebp.exe -q 88 "%%i" -o "%%~dpi%%~ni.webp"&del "%%i"&cd %%~dpi&ren "%%~ni.webp" "%%~nxi"&attrib "%%~nxi" +r +h)
)1>nul 2>nul
pauseCOPY
通过对处理后文件加隐藏属性实现

TOP

本帖最后由 miqilaosu 于 2019-6-20 10:51 编辑

回复 5# smss


    *.webp 改回png,jpg操作一次,隐藏属性一次,隐藏属性改回来一次,同一文件操作了三次
    *.webp改成*.pngxy,*.jpgxy,一次,最后再回来一次,同一文件操作了二次
个人感觉操作次数越少越好
@echo off&setlocal enabledelayedexpansion
for /f "delims=" %%i in ('dir /b /ad /a-h /s *.jpg,*.png') do (set "file=%%~nxi"
if "!file:~-6!" neq ".9.png" (%~dp0cwebp.exe -q 88 "%%i" -o "%%~dpi%%~ni.webp"&del "%%i"&cd %%~dpi&ren "%%~ni.webp" "%%~nxixy")
)1>nul 2>nul
ren *.pngxy *.png
ren *.jpgxy *.jpg
pauseCOPY

TOP

本帖最后由 smss 于 2019-6-20 11:13 编辑

回复 6# miqilaosu

你没有看明白 加隐藏是为了下次如果对该文件做同样的处理时规避重复操作
如:已对A文件夹下含所有子文件夹处理完毕 如果再次对A文件夹处理 则所有隐藏属性的图片将不会被再次处理,因为通过dir /b /ad /a-h /s过滤掉了 它将仅对那些新加入的图片(无隐藏属性的图片)处理

TOP

本帖最后由 miqilaosu 于 2019-6-20 13:13 编辑

回复 7# smss
@echo off&setlocal enabledelayedexpansion
for /f "delims=" %%i in ('dir /b /a-d /s *.jpg *.png') do (
set "file=%%~nxi"&set "smss=9"
findstr/i "%%i" webp.log >nul 2>nul&&set "smss="
if defined smss (
if "!file:~-6!" neq ".9.png" (%~dp0cwebp.exe -q 88 "%%i" -o "%%~dpi%%~ni.webp"&del /s/q/f/a "%%i"&cd %%~dpi&ren "%%~ni.webp" "%%~nxi"&&echo,%%i>>webp.log)
)
)1>nul 2>nul
pauseCOPY
那这样写应该也可以吧

TOP

返回列表