标题: [文件操作] 如何实现仅当指定文件夹存在时才执行相应操作? [打印本页]
作者: ttrrf 时间: 2014-4-4 23:54 标题: 如何实现仅当指定文件夹存在时才执行相应操作?
本帖最后由 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
作者: PowerShell 时间: 2014-4-5 12:22
cd BasicDreams.apk
进入文件夹后,要测试下进去没,即可。
在powershell下有多种方法,
又分为没进去前就测试---test-path
进去后测试-Resolve-Path,pwd等,
还可以用try ,,catch
作者: apang 时间: 2014-4-5 14:44
在每一个目录名前加上if判断
- @echo off 2>nul 3>nul
- cd /d "apk_out\"
- echo 删除所有非简体中文
- for /f "delims=" %%a in ('dir/ad/b/s *-zh-*^|findstr /iev "\-rCN"') do rd /s/q "%%a"
-
- if exist "AntiSpam.apk\" (
- cd /d "AntiSpam.apk\" & echo 当前 [AntiSpam.apk]
- echo 正在合并分辨率
- for %%a in (drawable-hdpi layout-largeui-hdpi layout-mediumui-hdpi) do (
- rd /s /q "res\%%a"
- )
- call :Next "res\values-xxhdpi\dimens.xml" "res\values-xhdpi\dimens.xml"
- cd ..
- )
-
- if exist "Backup.apk\" (
- cd /d "Backup.apk\" & echo 当前 [Backup.apk]
- for /f "delims=" %%i in ('dir /b "res\drawable-xhdpi\*.png"') do (
- del "res\drawable-hdpi\%%i"
- )
- cd ..
- )
- if exist "BasicDreams.apk\" (
- cd /d "BasicDreams.apk\" & echo 当前 [BasicDreams.apk]
- echo 正在删除其它分辨率,保留特高分辨率。
- rmdir /q /s res\mipmap-hdpi
- rmdir /q /s res\mipmap-mdpi
- cd ..
- )
-
- if exist "Browser.apk\" (
- cd /d "Browser.apk\" & echo 当前 [Browser.apk]
- echo 正在删除其它高分辨率。
- cd /d "res\"
- copy mipmap-xxhdpi\* mipmap-xhdpi\
- move /y mipmap-xhdpi\* mipmap-xxhdpi\
- rmdir /q /s mipmap-hdpi
- rmdir /q /s mipmap-mdpi
- rmdir /q /s mipmap-xhdpi
- rmdir /q /s drawable-land-hdpi
- rmdir /q /s drawable-land-xhdpi
- rmdir /q /s drawable-sw600dp-hdpi
- for /f "delims=" %%i in ('dir /b drawable-xhdpi\*.png') do (
- del "drawable-hdpi\%%i"
- )
- for /f "delims=" %%i in ('dir /b drawable-xxhdpi\*.png') do (
- del "drawable-xhdpi\%%i"
- )
- 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"
- cd ..\..\
- )
- pause & goto :eof
-
- :Next
- (for /f "delims=" %%a in ('findstr /ig:"%~1" "%~2"') do (
- for /f "tokens=*" %%b in ("%%a") do if "%%a" neq "%%b" echo,%%a
- ))>$
- findstr /ivg:$ "%~2">$1
- move $1 "%~2"
- del $
复制代码
作者: ttrrf 时间: 2014-4-5 20:03
回复 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 是啥意思?
作者: apang 时间: 2014-4-5 21:27
本帖最后由 apang 于 2014-4-5 21:32 编辑
回复 4# ttrrf
call :标签名 "参数1" "参数2"
如果 apk_out 下的子目录名不存在,cd .. 会切换工作目录到 apk_out 的上一级目录,就会导致错误。
不想作大的改动的话,试试将所有的 cd .. 改成 cd /d "D:\apk_out\",(绝对路径),应该也可以。
作者: ttrrf 时间: 2016-4-7 11:54
回复 3# apang
感谢你的帮忙,我很久没搞这个批处理了。现在才看到。又燃起了欲望 了,哈哈!O(∩_∩)O谢谢你!
欢迎光临 批处理之家 (http://bathome.net./) |
Powered by Discuz! 7.2 |