[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文件操作] [已解决]又是循环有点乱了

本帖最后由 smss 于 2019-6-25 21:11 编辑
  1. dir /b /a-h /s "%1" | find "manifest.xml" 1>nul 2>nul&&set /p H=输入任意字符混淆代码,按回车不混淆代码:
  2. (for /f "delims=" %%b in ('dir /b /a-h /s "%1\*.xml"') do (set "P=%%~dpb"
  3. cd /d "%~dp0"
  4. copy "%%b" "%~dp0manifest.xml"
  5. if /i "%%~nxb"=="config.xml" (if "%H%" NEQ "" (copy "%%~dpbconfig.xml" "%~dp0config.xml")
  6. )
  7. if /i "%%~nxb"=="manifest.xml" (if "%H%" NEQ "" (powershell.exe -command "&{%~dp0混淆代码.ps1}")
  8. PowerShell -exec ByPass "&'%~dp0同步后缀.ps1'" "!P:~,-1!") else (PowerShell -exec ByPass "&'%~dp0注释空行.ps1'")
  9. if "%H%" NEQ "" (if exist "%~dp0config.xml" (move "%~dp0config.xml" "%%~dpbconfig.xml"
  10. del "%~dp0config.xml"
  11. attrib "%%~dpbconfig.xml" +h)
  12. )
  13. move "%~dp01.xml" "%%b"&attrib "%%b" +h
  14. ))1>nul 2>nul &&echo                   所有代码处理完毕||echo                   无需处理完美跳过!
复制代码
文件目录结构如下
manifest.xml文件所在文件夹下可能有config.xml
H不等于"" 执行"混淆代码.ps1"+"同步后缀.ps1"
     等于"" 时仅执行"同步后缀.ps1"

再对其它xml(含config.xml)名称不等于manifest.xml执行"注释空行.ps1"

处理后 再移动回去 并加隐藏
  1. @echo off
  2. dir /b /a-h /s "%1" | find "manifest.xml" 1>nul 2>nul&&set /p H=输入任意字符混淆代码,按回车不混淆代码:
  3. echo ---------------------------------所有manifest.xml-----------------------------------------
  4. for /f "delims=" %%b in ('dir /b /a-h /s "%1\*manifest.xml"') do (set "P=%%~dpb"
  5. copy "%%b" "%~dp0manifest.xml"
  6. cd /d "%~dp0"
  7. if "%H%" NEQ "" (if exist "%%~dpbconfig.xml" (copy "%%~dpbconfig.xml" "%~dp0config.xml")
  8. powershell.exe -command "&{%~dp0混淆代码.ps1}")
  9. PowerShell -exec ByPass "&'%~dp0同步后缀.ps1'" "!P:~,-1!"
  10. move "%~dp01.xml" "%%b"
  11. attrib "%%b" +h
  12. if "%H%" NEQ "" (if exist "%~dp0config.xml" (move "%~dp0config.xml" "%%~dpbconfig.xml"
  13. attrib "%%~dpbconfig.xml" +h))
  14. )
  15. pause
  16. echo ------------------------------------所有.xml-----------------------------------------
  17. for /f "delims=" %%a in ('dir /b /a-h /s "%1\*.xml"') do (
  18. if /i "%%~nxa" NEQ "manifest.xml" (copy "%%a" "%~dp0manifest.xml"
  19. cd /d "%~dp0"
  20. PowerShell -exec ByPass "&'%~dp0注释空行.ps1'"
  21. move "%~dp01.xml" "%%a"
  22. attrib "%%a" +h
  23. ))
  24. pause
复制代码

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

回复 1# smss


    说实话,你的逻辑我有点没看明白
你代码第一行,%1\*.xml    是前边已经进入PHOTOSHOP目录了吗,*.xml这种文件不说其它就单单PS目录本身都会存在几十个

还有第3行复制,%%d得到的可能都是其它的*.xml,,如果有100个*.xml文件会来回覆盖执行,也就是说你的*.xml可能被换成了未知文件

如果第一行搜索直接搜索"CSXS\manifest.xml",然后得到的%%~dpbconfig.xml  进行判断会好一些,其实这也有漏洞就是其它文件夹如果有manifest.xml也会出错,估计还要加一些判断才行
  1. if exist "%%~dpbconfig.xml"
复制代码

TOP

本帖最后由 smss 于 2019-6-25 14:10 编辑

回复 2# miqilaosu
是拖拽获取路径
  1. cd "%1"
  2. for /f "delims=" %%b in ('dir /b /a-h /s "*.xml"') do (set "P=%%~dpb")
复制代码
  1. for /f "delims=" %%b in ('dir /b /a-h /s "%1\*.xml"') do (set "P=%%~dpb")
复制代码
就不用CD到目录下了,有时会出错 用"%~dp1%~n1"更加准确点

TOP

本帖最后由 miqilaosu 于 2019-6-25 16:10 编辑

回复 3# smss
  1. setlocal enabledelayedexpansion
  2. set /p H=输入任意字符混淆代码,按回车不混淆代码:
  3. for /f "delims=" %%b in ('dir /b /a-h /s /o:n "%1\*.xml"') do (set "P=%%~dpb"
  4. cd /d "%~dp0"
  5. if exist "%%~dpbmanifest.xml" (
  6. if exist "%%~dpbconfig.xml" (
  7. if "%H%" NEQ "" (
  8. xcopy "%%~dpbmanifest.xml" "%~dp0"
  9. xcopy "%%~dpbconfig.xml" "%~dp0"
  10. powershell.exe -command "&{%~dp0混淆代码.ps1}"
  11. PowerShell -exec ByPass "&'%~dp0同步后缀.ps1'" "!P:~,-1!"
  12. move "%~dp0%%~nxb" "%%b"&attrib "%%b" +h
  13. del "%~dp0config.xml"
  14. attrib "%%~dpbconfig.xml" +h
  15. )
  16. )
  17. ) else (
  18. robocopy  "!P:~,-1!"  "%~dp0\" "%%~nxb" /xf config.xml
  19. PowerShell -exec ByPass "&'%~dp0注释空行.ps1'"
  20. move "%~dp0%%~nxb" "%%b"&attrib "%%b" +h
  21. )
  22. )1>nul 2>nul &&echo                   所有代码处理完毕||echo                   无需处理完美跳过!
  23. pause
复制代码

TOP

本帖最后由 smss 于 2019-6-25 15:59 编辑

回复 4# miqilaosu
还是不行 感觉应该再写个循环来获取*.xml中的manifest.xml
  1. @echo off
  2. for /f "delims=" %%a in ('dir /b /a-h /s "%1\*.xml"') do (for /f "delims=" %%b in ('dir /b /s "%%~dpa\*manifest.xml"') do (for /f "delims=" %%c in ('dir /b /a-h /s "%%~dpa\*config.xml"') do (
  3. echo %%c
  4. echo ---------------------------------理还乱-----------------------------------------C)
  5. echo %%b
  6. echo ------------------------------------剪不断-----------------------------------------B))2>nul
  7. pause
复制代码

TOP

本帖最后由 miqilaosu 于 2019-6-25 16:10 编辑

回复 5# smss

   config.xml被执行了两次,如果else里的用这个复制方法应该可以你试试?
  1. robocopy  "!P:~,-1!"  "%~dp0\" "%%~nxb" /xf config.xml
复制代码
这样复制的话,config.xml不能被成功复制,这种方法需要注意 \" 会被报错

TOP

本帖最后由 smss 于 2019-6-25 21:18 编辑

回复 6# miqilaosu
  1. @echo off&setlocal enabledelayedexpansion
  2. dir /b /a-h /s "%1" | find "manifest.xml" 1>nul 2>nul&&set /p H=输入任意字符混淆代码,按回车不混淆代码:
  3. (for /f "delims=" %%b in ('dir /b /a-h /s /o:n "%1\*.xml"') do (set "P=%%~dpb"
  4. echo %%b
  5. cd /d "%~dp0"
  6. if exist "%%~dpbmanifest.xml" (
  7. copy "%%~dpbmanifest.xml" "%~dp0"
  8. if "%H%" NEQ "" (
  9. if exist "%%~dpbconfig.xml" (
  10. copy "%%~dpbconfig.xml" "%~dp0"
  11. )
  12.     powershell.exe -command "&{%~dp0混淆代码.ps1}"
  13. )
  14. PowerShell -exec ByPass "&'%~dp0同步后缀.ps1'" "!P:~,-1!"
  15. move "%~dp01.xml" "%%b"&attrib "%%b" +h
  16. if "%H%" NEQ "" (
  17. if exist "%%~dp0config.xml" (
  18. move "%~dp0config.xml" "%%~dpbconfig.xml&attrib "%%~dpbconfig.xml" +h
  19. )
  20. )
  21. ) else (
  22. copy "%%b" "%~dp0manifest.xml"
  23. PowerShell -exec ByPass "&'%~dp0注释空行.ps1'"
  24. move "%~dp01.xml" "%%b"&attrib "%%b" +h
  25. )
  26. ))&&echo                   所有代码处理完毕||echo                   无需处理完美跳过!
  27. pause
  28. 1>nul 2>nul
复制代码
改成这样 现在排查

复制文本用copy 目录才能用xcopy 大体思路是对的
不过别乱改文件名 那样会导致重新排查 如
  1. PowerShell -exec ByPass "&'%~dp0同步后缀.ps1'" "!P:~,-1!"
  2. move "%~dp0%%~nxb" "%%b"&attrib "%%b" +h
复制代码
处理过后都会变为1.xml
  1. move "%~dp01.xml" "%%b"&attrib "%%b" +h
复制代码

TOP

返回列表