标题: [文件操作] [已解决]求修改过滤文件夹的批处理 谢谢版主Batcher和miqilaosu [打印本页]
作者: smss 时间: 2019-6-20 21:43 标题: [已解决]求修改过滤文件夹的批处理 谢谢版主Batcher和miqilaosu
本帖最后由 smss 于 2019-6-21 14:47 编辑
@echo off
setlocal enabledelayedexpansion
cd %1
set k=*.jpg *.png
for /f "delims=" %%i in ('dir /b /ad /a-h /s .\%k%') do (set "file=%%~nxi"
if "!file:~-6!" neq ".9.png" (%~dp0cwebp.exe -q 100 "%%i" -o "%%~dpi%%~ni.webp"&del "%%i"&cd %%~dpi&ren "%%~ni.webp" "%%~nxi"&attrib "%%~nxi" +h)
)1>nul 2>nul
::处理lockscreen文件
if exist %1\lockscreen\advance (xcopy /e /i /y %1\lockscreen\advance %~dp0advance
copy %1\lockscreen\advance\manifest.xml %~dp0
cd /d "%~dp0"
PowerShell -exec ByPass "&'%~dp01.ps1'" "%~f1\lockscreen\advance"
::call 1.bat
move %~dp0\1.xml %1\lockscreen\advance\manifest.xml
for /f "delims=" %%i in ('dir /b /ad /a-h /s %1\lockscreen\advance\*') do (attrib "%%i" +h)
)>nul
pause
如上红色部分 希望的结果是循环至%1\lockscreen目录时不执行红色代码(即不加隐藏属性)怎样过滤文件夹lockscreen
作者: Batcher 时间: 2019-6-20 22:47
- @echo off
- setlocal enabledelayedexpansion
- cd %1
- set k=*.jpg *.png
- for /f "delims=" %%i in ('dir /b /ad /a-h /s .\%k%') do (
- set "file=%%~nxi"
- if "!file:~-6!" neq ".9.png" (
- %~dp0cwebp.exe -q 100 "%%i" -o "%%~dpi%%~ni.webp"
- del "%%i"
- cd %%~dpi
- ren "%%~ni.webp" "%%~nxi"
- REM 在这里做判断符合要求吗?
- if "%%~nxi" neq "lockscreen" (
- attrib "%%~nxi" +h
- )
- )
- )1>nul 2>nul
复制代码
作者: smss 时间: 2019-6-20 23:46
本帖最后由 smss 于 2019-6-21 12:31 编辑
回复 2# Batcher
是的 不过想反了 是if not "%%~dpi" neq "%1\lockscreen\advance\" 则不执行(attrib "%%~nxi" +h)- for /f "delims=" %%i in ('dir /b /ad /a-h /s .\%k%') do (set "file=%%~nxi"
- if "!file:~-6!" neq ".9.png" (%~dp0cwebp.exe -q 100 "%%i" -o "%%~dpi%%~ni.webp"1>nul 2>nul&del "%%i"&cd %%~dpi&ren "%%~ni.webp" "%%~nxi"
- if not "%%~dpi" == "%1\lockscreen\advance\" (if not "%%~dpi" == "%1\clock_2x4\" (if not "%%~dpi" == "%1\miwallpaper\" (attrib "%%~nxi" +h)
- echo %%~dpi
- ))))
- pause
复制代码
改成以上 只能过滤掉 %1\lockscreen\advance\ 过滤不掉其下的子目录中的文件 例如%1\lockscreen\advance\1\下有图片1.png 用%1\lockscreen\advance\扩充不到 便过滤不掉
希望的结果是%%~dpi 路径中含有%1\lockscreen\advance\ 便过滤掉 改了好几遍还不可以 其中if not "%%~dpi" == "%%~dpa" 也不知道是哪错了 为什么不可以呢???- @echo off
- setlocal enabledelayedexpansion
- cd %1
- 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 100 "%%i" -o "%%~dpi%%~ni.webp"1>nul 2>nul&del "%%i"&cd %%~dpi&ren "%%~ni.webp" "%%~nxi"
- for /f "delims=" %%a in ('dir /b /ad /a-h /s %1\lockscreen\advance\*.jpg *.png') do (
- if not "%%~dpi" == "%%~dpa" (if not "%%~dpi" == "%1\clock_2x4\" (if not "%%~dpi" == "%1\miwallpaper\" (attrib "%%~nxi" +h)
- echo %%~dpi
- echo %%~dpa
- echo.
- )))))
- pause
复制代码
作者: Batcher 时间: 2019-6-21 09:00
for /f "delims=" %%i in ('dir /b /ad /a-h /s .\%k% ^| findstr /v "%1\lockscreen\advance\"') do (
这这里过滤可以吗?
作者: smss 时间: 2019-6-21 11:06
回复 4# Batcher
这样肯定不行lockscreen中的图片需要处理成.webp
作者: miqilaosu 时间: 2019-6-21 11:46
本帖最后由 miqilaosu 于 2019-6-21 14:19 编辑
- for /f "delims=" %%i in ('dir /b /ad /a-h /s .\%k%') do (set "file=%%~nxi"&set smss=2
- if "!file:~-6!" neq ".9.png" (%~dp0cwebp.exe -q 100 "%%i" -o "%%~dpi%%~ni.webp"1>nul 2>nul&del "%%i"&cd %%~dpi&ren "%%~ni.webp" "%%~nxi"
- echo "%%~dpi"|findstr /i "%1\lockscreen\advance\\" >nul 2>nul&&set "smss="
- if defined smss (
- if not "%%~dpi" == "%1\clock_2x4\" (if not "%%~dpi" == "%1\miwallpaper\" (attrib "%%~nxi" +h))
- echo %%~dpi
- )
- ))
- pause
复制代码
还不如把操作过的都放记事本里呢,判断来判断去,感觉发蒙,而且隐藏文件这种你自己电脑上用行,如果是给别人用还弄隐文件,估计一运行发现图片全没了
作者: smss 时间: 2019-6-21 11:59
回复 6# miqilaosu
要得就是隐藏处理效果 其中%1是获取相对路径 如果别人电脑不能运行 则说明代码写的不对导致的不兼容 是自身问题
作者: miqilaosu 时间: 2019-6-21 12:31
回复 7# smss
我说的是电脑默认设置,一般电脑都是隐藏文件不可见的,我也是运行你的BAT后,发现测试目录的文件都没了,才自己调成可见的,如果是给客户用的话,就需要给客户电脑也设置成可见,除非这个文件转完格式不去用了
作者: smss 时间: 2019-6-21 12:36
回复 8# miqilaosu
要的就是隐藏 要的就是隐藏 要的就是隐藏
作者: Batcher 时间: 2019-6-21 12:51
回复 3# smss - @echo off
- for /f "delims=" %%i in ('dir /b /ad /a-h /s .\%k%') do (
- set "file=%%~nxi"
- if "!file:~-6!" neq ".9.png" (
- %~dp0cwebp.exe -q 100 "%%i" -o "%%~dpi%%~ni.webp" 1>nul 2>nul
- del "%%i"
- cd %%~dpi
- ren "%%~ni.webp" "%%~nxi"
- REM 这样判断可以吗
- echo %%~dpi | findstr "\lockscreen\advance\" >nul 2>&1
- if errorlevel 1 (
- if not "%%~dpi" == "%1\clock_2x4\" (
- if not "%%~dpi" == "%1\miwallpaper\" (
- attrib "%%~nxi" +h
- )
- echo %%~dpi
- )
- )
- )
- )
- pause
复制代码
作者: smss 时间: 2019-6-21 13:39
回复 10# Batcher 不行%%~dpi 含所有处理图片所在路径 传给| findstr "\lockscreen\advance\" >nul 2>&1 起不到过滤作用
作者: Batcher 时间: 2019-6-21 13:53
回复 11# smss
我可能还是没能理解你的需求,请把当前的目录结构和你想实现的功能描述一下吧。
作者: miqilaosu 时间: 2019-6-21 14:18
本帖最后由 miqilaosu 于 2019-6-21 14:39 编辑
回复 11# smss 复制代码
最后不用杠,或者把最后的杠换成两个杠,\"直接在findstr 里用会被注释掉,所以查不到- echo.%%~dpi | findstr \lockscreen\advance\ >nul 2>&1
复制代码
反正没空格,这么写好像也可以
作者: smss 时间: 2019-6-21 14:46
回复 12# Batcher 回复 13# miqilaosu - @echo off
- setlocal enabledelayedexpansion
- cd %1
- 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 100 "%%i" -o "%%~dpi%%~ni.webp" 1>nul 2>nul&del "%%i"&cd %%~dpi&ren "%%~ni.webp" "%%~nxi"
- echo %%~dpi | findstr "\lockscreen\advance \clock_2x4 \miwallpaper" >nul 2>&1
- if errorlevel 1 (attrib "%%~nxi" +h)
- ))
- pause
复制代码
OK啦 谢谢版主Batcher和miqilaosu
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |