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

[文件操作] 如何实现仅当指定文件夹存在时才执行相应操作?

本帖最后由 pcl_test 于 2016-4-7 13:04 编辑

我有一个 bat,内容是:
@echo 开始做精简
cd apk_out\
cd AntiSpam.apk

@echo 当前【AntiSpam.apk】正在删除繁体中文
rmdir /q /s res\values-zh-rTW
@echo 正在合并分辨率
rmdir /q /s res\drawable-hdpi
rmdir /q /s res\layout-largeui-hdpi
rmdir /q /s res\layout-mediumui-hdpi
(for /f "delims=" %%a in ('findstr /ig:res\values-xxhdpi\dimens.xml res\values-xhdpi\dimens.xml') do (
    for /f "tokens=*" %%b in ("%%a") do if "%%a" neq "%%b" echo,%%a
))>$
findstr /ivg res\values-xhdpi\dimens.xml>$1
move $1 res\values-xhdpi\dimens.xml
del $
cd ..
cd ApplicationsProvider.apk
@echo 当前【ApplicationsProvider.apk】正在删除繁体中文和其它语言
rmdir /q /s res\values-zh-rTW
cd ..
cd Backup.apk@echo 当前【Backup.apk】正在删除繁体中文
rmdir /q /s res\values-zh-rTW
cd res
for /f "delims=" %%i in ('dir /b .\drawable-hdpi\*.png') do (
  if exist .\drawable-xhdpi\%%i del,%%~dpi\drawable-hdpi\%%i
)
cd ..
cd ..
cd BackupRestoreConfirmation.apk
@echo 当前【BackupRestoreConfirmation.apk】正在删除繁体中文
rmdir /q /s res\values-zh-rTW
cd ..
cd BasicDreams.apk
@echo 当前【BasicDreams.apk】正在删除繁体中文
rmdir /q /s res\values-zh-rTW
@echo 正在删除其它分辨率,保留特高分辨率。
rmdir /q /s res\mipmap-hdpi
rmdir /q /s res\mipmap-mdpi
cd ..
cd Bluetooth.apk
@echo 当前【Bluetooth.apk】正在删除繁体中文
rmdir /q /s res\values-zh-rTW
cd ..
cd Browser.apk
@echo 当前【Browser.apk】正在删除繁体相关文件和其它高分辨率。
rmdir /q /s assets\quicklinks4-zh-rHK
rmdir /q /s assets\quicklinks4-zh-rTW
rmdir /q /s assets\quicklinks4-en-rSG
rmdir /q /s assets\yellowpage3-zh-rTW
rmdir /q /s assets\yellowpage3-zh-rHK
rmdir /q /s assets\yellowpage3-en-rSG
rmdir /q /s res\values-zh-rTW
move /y res\mipmap-xxhdpi\* res\mipmap-xhdpi\
move /y res\mipmap-xhdpi\* res\mipmap-xxhdpi\
rmdir /q /s res\mipmap-hdpi
rmdir /q /s res\mipmap-mdpi
rmdir /q /s res\mipmap-xhdpi
rmdir /q /s res\drawable-land-hdpi
rmdir /q /s res\drawable-land-xhdpi
rmdir /q /s res\drawable-sw600dp-hdpi
cd res
for /f "delims=" %%i in ('dir /b .\drawable-hdpi\*.png') do (
  if exist .\drawable-xhdpi\%%i del,%%~dpi\drawable-hdpi\%%i
)
for /f "delims=" %%i in ('dir /b .\drawable-xhdpi\*.png') do (
  if exist .\drawable-xxhdpi\%%i del,%%~dpi\drawable-xhdpi\%%i
)
(for /f "delims=" %%a in ('findstr /ig:values-xxhdpi\dimens.xml values-hdpi\dimens.xml') do (
    for /f "tokens=*" %%b in ("%%a") do if "%%a" neq "%%b" echo,%%a
))>$
findstr /ivg:$ values-hdpi\dimens.xml>$1
move $1 values-hdpi\dimens.xml
del $
(for /f "delims=" %%a in ('findstr /ig:values-xxhdpi\dimens.xml values-xhdpi\dimens.xml') do (
    for /f "tokens=*" %%b in ("%%a") do if "%%a" neq "%%b" echo,%%a
))>$
findstr /ivg:$ values-xhdpi\dimens.xml>$1
move $1 values-xhdpi\dimens.xml
del $
del /q /s values-xhdpi\integers.xml
(for /f "delims=" %%a in ('findstr /ig:values-xhdpi\dimens.xml values\dimens.xml') do (
    for /f "tokens=*" %%b in ("%%a") do if "%%a" neq "%%b" echo,%%a
))>$
findstr /ivg:$ values\dimens.xml>$1
move $1 values\dimens.xml
del $
(for /f "delims=" %%a in ('findstr /ig:values-xxhdpi\dimens.xml values\dimens.xml') do (
    for /f "tokens=*" %%b in ("%%a") do if "%%a" neq "%%b" echo,%%a
))>$
findstr /ivg:$ values\dimens.xml>$1
move $1 values\dimens.xml
del $
标了红色的是每一个文件夹,这个脚本有一个致命弱点,就是如果其中有一个文件夹没有的话,就说是系统找不到文件,也就无法此行。我是想高手帮我改一下,用循环的语句,定位到每一个文件夹下,即使有一些文件夹没有了(其实不止这些文件夹的,还有几十个,我就是拿几个做代表),其他的也能
此行。感谢了。
我把apk_out文件夹上传到百度网盘了,文件有点大。

http://pan.baidu.com/s/1gdwvPdD
1

评分人数

cd BasicDreams.apk
进入文件夹后,要测试下进去没,即可。

在powershell下有多种方法,
又分为没进去前就测试---test-path
进去后测试-Resolve-Path,pwd等,
还可以用try ,,catch
脚本是写给人看的,是写给用户看的,而不是写给机子看的
用户能看懂、会修改的脚本,才是好脚本。
写易懂的powershell脚本帮人解决问题,进而让用户学会自渔,吾所愿也

TOP

在每一个目录名前加上if判断
  1. @echo off 2>nul 3>nul
  2. cd /d "apk_out\"
  3. echo 删除所有非简体中文
  4. for /f "delims=" %%a in ('dir/ad/b/s *-zh-*^|findstr /iev "\-rCN"') do rd /s/q "%%a"
  5. if exist "AntiSpam.apk\" (
  6.     cd /d "AntiSpam.apk\" & echo 当前 [AntiSpam.apk]
  7.     echo 正在合并分辨率
  8.     for %%a in (drawable-hdpi layout-largeui-hdpi layout-mediumui-hdpi) do (
  9.         rd /s /q "res\%%a"
  10.     )
  11.     call :Next "res\values-xxhdpi\dimens.xml" "res\values-xhdpi\dimens.xml"
  12.     cd ..
  13. )
  14. if exist "Backup.apk\" (
  15.     cd /d "Backup.apk\" & echo 当前 [Backup.apk]
  16.     for /f "delims=" %%i in ('dir /b "res\drawable-xhdpi\*.png"') do (
  17.         del "res\drawable-hdpi\%%i"
  18.     )
  19.     cd ..
  20. )
  21. if exist "BasicDreams.apk\" (
  22.     cd /d "BasicDreams.apk\" & echo 当前 [BasicDreams.apk]
  23.     echo 正在删除其它分辨率,保留特高分辨率。
  24.     rmdir /q /s res\mipmap-hdpi
  25.     rmdir /q /s res\mipmap-mdpi
  26.     cd ..
  27. )
  28. if exist "Browser.apk\" (
  29.     cd /d "Browser.apk\" & echo 当前 [Browser.apk]
  30.     echo 正在删除其它高分辨率。
  31.     cd /d "res\"
  32.     copy mipmap-xxhdpi\* mipmap-xhdpi\
  33.     move /y mipmap-xhdpi\* mipmap-xxhdpi\
  34.     rmdir /q /s mipmap-hdpi
  35.     rmdir /q /s mipmap-mdpi
  36.     rmdir /q /s mipmap-xhdpi
  37.     rmdir /q /s drawable-land-hdpi
  38.     rmdir /q /s drawable-land-xhdpi
  39.     rmdir /q /s drawable-sw600dp-hdpi
  40.     for /f "delims=" %%i in ('dir /b drawable-xhdpi\*.png') do (
  41.         del "drawable-hdpi\%%i"
  42.     )
  43.     for /f "delims=" %%i in ('dir /b drawable-xxhdpi\*.png') do (
  44.         del "drawable-xhdpi\%%i"
  45.     )
  46.     call :Next "values-xxhdpi\dimens.xml" "values-hdpi\dimens.xml"
  47.     call :Next "values-xxhdpi\dimens.xml" "values-xhdpi\dimens.xml"
  48.     del "values-xhdpi\integers.xml"
  49.     call :Next "values-xhdpi\dimens.xml" "values\dimens.xml"
  50.     call :Next "values-xxhdpi\dimens.xml" "values\dimens.xml"
  51.     cd ..\..\
  52. )
  53. pause & goto :eof
  54. :Next
  55. (for /f "delims=" %%a in ('findstr /ig:"%~1" "%~2"') do (
  56.     for /f "tokens=*" %%b in ("%%a") do if "%%a" neq "%%b" echo,%%a
  57. ))>$
  58. findstr /ivg:$ "%~2">$1
  59. move $1 "%~2"
  60. del $
复制代码

TOP

回复 3# apang


       call :Next "values-xxhdpi\dimens.xml" "values-hdpi\dimens.xml"

    call :Next "values-xxhdpi\dimens.xml" "values-xhdpi\dimens.xml"

    del "values-xhdpi\integers.xml"

    call :Next "values-xhdpi\dimens.xml" "values\dimens.xml"

    call :Next "values-xxhdpi\dimens.xml" "values\dimens.xml"

这Next 是啥意思?

TOP

本帖最后由 apang 于 2014-4-5 21:32 编辑

回复 4# ttrrf


    call :标签名 "参数1" "参数2"
如果 apk_out 下的子目录名不存在,cd .. 会切换工作目录到 apk_out 的上一级目录,就会导致错误。
不想作大的改动的话,试试将所有的 cd .. 改成 cd /d "D:\apk_out\",(绝对路径),应该也可以。

TOP

回复 3# apang
感谢你的帮忙,我很久没搞这个批处理了。现在才看到。又燃起了欲望 了,哈哈!O(∩_∩)O谢谢你!

TOP

返回列表