Board logo

标题: [文件操作] [已解决]求修改过滤文件夹的批处理 谢谢版主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

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. cd %1
  4. set k=*.jpg *.png
  5. for /f "delims=" %%i in ('dir /b /ad /a-h /s .\%k%') do (
  6.     set "file=%%~nxi"
  7.     if "!file:~-6!" neq ".9.png" (
  8.         %~dp0cwebp.exe -q 100 "%%i" -o "%%~dpi%%~ni.webp"
  9.         del "%%i"
  10.         cd %%~dpi
  11.         ren "%%~ni.webp" "%%~nxi"
  12.         REM 在这里做判断符合要求吗?
  13.         if "%%~nxi" neq "lockscreen" (
  14.             attrib "%%~nxi" +h
  15.         )
  16.     )
  17. )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)
  1. for /f "delims=" %%i in ('dir /b /ad /a-h /s .\%k%') do (set "file=%%~nxi"
  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"
  3. if not "%%~dpi" == "%1\lockscreen\advance\" (if not "%%~dpi" == "%1\clock_2x4\" (if not "%%~dpi" == "%1\miwallpaper\" (attrib "%%~nxi" +h)
  4. echo %%~dpi
  5. ))))
  6. pause
复制代码
改成以上 只能过滤掉 %1\lockscreen\advance\ 过滤不掉其下的子目录中的文件 例如%1\lockscreen\advance\1\下有图片1.png 用%1\lockscreen\advance\扩充不到 便过滤不掉

希望的结果是%%~dpi 路径中含有%1\lockscreen\advance\ 便过滤掉 改了好几遍还不可以 其中if not "%%~dpi" == "%%~dpa" 也不知道是哪错了 为什么不可以呢???
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. cd %1
  4. for /f "delims=" %%i in ('dir /b /ad /a-h /s *.jpg *.png') do (set "file=%%~nxi"
  5. 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"
  6. for /f "delims=" %%a in ('dir /b /ad /a-h /s %1\lockscreen\advance\*.jpg *.png') do (
  7. if not "%%~dpi" == "%%~dpa" (if not "%%~dpi" == "%1\clock_2x4\" (if not "%%~dpi" == "%1\miwallpaper\" (attrib "%%~nxi" +h)
  8. echo %%~dpi
  9. echo %%~dpa
  10. echo.
  11. )))))
  12. 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 编辑
  1. for /f "delims=" %%i in ('dir /b /ad /a-h /s .\%k%') do (set "file=%%~nxi"&set smss=2
  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"
  3. echo "%%~dpi"|findstr /i "%1\lockscreen\advance\\" >nul 2>nul&&set "smss="
  4. if defined smss (
  5. if not "%%~dpi" == "%1\clock_2x4\" (if not "%%~dpi" == "%1\miwallpaper\" (attrib "%%~nxi" +h))
  6. echo %%~dpi
  7. )
  8. ))
  9. 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
  1. @echo off
  2. for /f "delims=" %%i in ('dir /b /ad /a-h /s .\%k%') do (
  3.     set "file=%%~nxi"
  4.     if "!file:~-6!" neq ".9.png" (
  5.         %~dp0cwebp.exe -q 100 "%%i" -o "%%~dpi%%~ni.webp" 1>nul 2>nul
  6.         del "%%i"
  7.         cd %%~dpi
  8.         ren "%%~ni.webp" "%%~nxi"
  9.         REM 这样判断可以吗
  10.         echo %%~dpi | findstr "\lockscreen\advance\" >nul 2>&1
  11.         if errorlevel 1 (
  12.             if not "%%~dpi" == "%1\clock_2x4\" (
  13.                 if not "%%~dpi" == "%1\miwallpaper\" (
  14.                     attrib "%%~nxi" +h
  15.                 )
  16.                 echo %%~dpi
  17.             )
  18.         )
  19.     )
  20. )
  21. 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
  1. %1\lockscreen\advance
复制代码
最后不用杠,或者把最后的杠换成两个杠,\"直接在findstr 里用会被注释掉,所以查不到
  1. echo.%%~dpi | findstr \lockscreen\advance\ >nul 2>&1
复制代码
反正没空格,这么写好像也可以
作者: smss    时间: 2019-6-21 14:46

回复 12# Batcher 回复 13# miqilaosu
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. cd %1
  4. for /f "delims=" %%i in ('dir /b /ad /a-h /s .\*.jpg *.png') do (set "file=%%~nxi"
  5. 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"
  6. echo %%~dpi | findstr "\lockscreen\advance \clock_2x4 \miwallpaper" >nul 2>&1
  7. if errorlevel 1 (attrib "%%~nxi" +h)
  8. ))
  9. pause
复制代码
OK啦 谢谢版主Batcher和miqilaosu




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2