标题: [文本处理] 批处理替换文件内容多条命令执行为何报错? [打印本页]
作者: 306485914 时间: 2014-6-6 09:12 标题: 批处理替换文件内容多条命令执行为何报错?
- @echo off
- for /f %%i in ('sed -n "/android.intent.action.MAIN/=" C:\Users\Administrator\Desktop
-
- \AndroidManifest.xml') do (
- set n=%%i
- )
- set /a m=n-3
- sed -r "%m%,%n%!d; /activity android:label/!d; s/.*android:name=.([^\"]+)\".*/\1/" C:\Users
-
- \Administrator\Desktop\AndroidManifest.xml > %temp%\1.dat
- set /p str=<%temp%\1.dat
- echo %str%
-
- pause
复制代码
这个单独运行正常显示- set iserror=0
- sed -i -e "/<\/application>/r advert\adall.txt" -e "s/<\/application>//" %1\AndroidManifest.xml
- if not %errorlevel%==0 ( set iserror=%errorlevel% )
-
- if not "%2"=="" ( sed -i "s/zy2860634b9e5742b2b43acc2e0a22b5f8/%2/g" %1\AndroidManifest.xml )
- if not %errorlevel%==0 ( set iserror=%errorlevel% )
-
- xcopy advert\SDKALL\* %1\ /Y /E /Q >nul
- if not %errorlevel%==0 ( set iserror=%errorlevel% )
-
- ::启动项包名
- for /f %%i in ('sed -n "/android.intent.action.MAIN/=" %1\AndroidManifest.xml') do (
- set n=%%i
- )
- set /a m=n-3
- sed -r "%m%,%n%!d; /activity android:label/!d; s/.*android:name=.([^\"]+)\".*/\1/" %1\AndroidManifest.xml > %temp%\1.dat
- set /p str=<%temp%\1.dat
- :next
- ::echo %str%
复制代码
当和这些命令放到一起的时候就报错
错误提示:sed: -e expression #1, char 75: Unknown option to `s
大神帮忙解决谢谢
作者: Batcher 时间: 2014-6-6 09:19
是哪一行在报错?
作者: 306485914 时间: 2014-6-6 09:27
感觉是这个吧sed -i -e "/<\/application>/r advert\adall.txt" -e "s/<\/application>//" %1\AndroidManifest.xml 那个错上显示sed: -e expression #1, char 75: Unknown option to `s
作者: 306485914 时间: 2014-6-6 09:27
回复 2# Batcher
感觉是这个吧sed -i -e "/<\/application>/r advert\adall.txt" -e "s/<\/application>//" %1\AndroidManifest.xml 那个错上显示sed: -e expression #1, char 75: Unknown option to `s
作者: 306485914 时间: 2014-6-6 09:28
回复 2# Batcher
但是 不加上咱昨天写的那个 就没事,加上昨天你写的那个就报错
作者: Batcher 时间: 2014-6-6 09:35
回复 4# 306485914
把代码保存为C:\test.bat
在CMD窗口里面执行C:\test.bat
看看到底是哪一行在报错
作者: 306485914 时间: 2014-6-6 09:48
回复 6# Batcher
那命令拿出来单独测没报错
作者: 306485914 时间: 2014-6-6 09:51
回复 6# Batcher
sed: -e expression #1, char 7: Extra characters after command又出来一个这个错
作者: Batcher 时间: 2014-6-6 10:04
回复 7# 306485914
安装6楼的方法做,把完整执行过程发出来
作者: 306485914 时间: 2014-6-6 10:08
@echo off
echo.
if not "%~1"=="" ( if exist %1 goto start else goto noexist ) else goto usage
:noexist
echo 目录:%~1 不存在!请确认是否输错!
goto end
:usage
echo 用法:%0 目录名 jid
goto end
:start
set iserror=0
sed -i -e "/<\/application>/r advert\adall.txt" -e "s/<\/application>//" %1\AndroidManifest.xml
if not %errorlevel%==0 ( set iserror=%errorlevel% )
if not "%2"=="" ( sed -i "s/zy2860634b9e5742b2b43acc2e0a22b5f8/%2/g" %1\AndroidManifest.xml )
if not %errorlevel%==0 ( set iserror=%errorlevel% )
xcopy advert\SDKALL\* %1\ /Y /E /Q >nul
if not %errorlevel%==0 ( set iserror=%errorlevel% )
::启动项包名
for /f %%i in ('sed -n "/android.intent.action.MAIN/=" %1\AndroidManifest.xml') do (
set n=%%i
)
set /a m=n-3
sed -r "%m%,%n%!d; /activity android:label/!d; s/.*android:name=.([^\"]+)\".*/\1/" %1\AndroidManifest.xml > %temp%\1.dat
set /p str=<%temp%\1.dat
:next
::echo %str%
sed -i "s/com.example.andrpush_mytest_3_7_sdk_wulog_cgdemo.MainActivity/%str%/g" %1\AndroidManifest.xml
::echo %versionCode%
for /f "tokens=5 delims== " %%i in ('type %1\AndroidManifest.xml^| findstr "android:versionName"') do (
set versionName=%%~i
goto :next
)
:next
::echo %versionName%
for /f "tokens=3 delims== " %%i in ('type %1\AndroidManifest.xml^| findstr "android:versionCode"') do (
set versionCode=%%~i
goto :next
)
:next
for /f "tokens=3 delims=<>" %%i in ('type %1\res\values\strings.xml^| findstr "app_name"') do (
set appname=%%i
goto :next
)
:next
echo %appname%
echo 版本号:%versionCode%-----------------版本名: %versionName% >> %1\Package.txt
::sed -i "s#android:versionCode=\".*\"#android:versionCode=\"%newCode%\"#" %1\AndroidManifest.xml
:end
echo.
作者: Batcher 时间: 2014-6-6 10:14
回复 10# 306485914
这是你现在使用的完整代码对吧
把@echo off删掉
剩下的代码保存为C:\test.bat
开始
运行
cmd
C:\test.bat
把完整的结果发出来看看
作者: 306485914 时间: 2014-6-6 10:23
回复 11# Batcher
我这个程序是好几个批处理一起用的,单独拿出来不报错,但是放一起报错 把@echo off去掉以后显示的还是那一句的错
作者: 306485914 时间: 2014-6-6 11:02
回复 11# Batcher
现在确定了 你写的那个代码在dos中单独运行没问题 ,和我的放到一起就报错了 就是那个after command那个错
作者: Batcher 时间: 2014-6-6 11:22
回复 12# 306485914
我就是要看一下合并在一起之后,删除@echo off之后,在CMD窗口里面执行的完整结果。
不要双击执行test.bat
作者: 306485914 时间: 2014-6-6 11:28
回复 14# Batcher
正在为此目录加广告(所有模式)...1to50
sed: -e expression #1, char 7: Extra characters after command
"测试zhong"
1to50
加广告完成
这就是合并在一起后在dos中显示的结果 我都吧@echo off去掉了 但是就显示这点信息 我也不知道怎么回事
作者: Batcher 时间: 2014-6-6 13:11
把你的AndroidManifest.xml压缩之后传上来,我测试一下看看。
作者: 306485914 时间: 2014-6-6 17:03
xml文件源码 全部
作者: 306485914 时间: 2014-6-6 17:17
回复 16# Batcher
我要根据android.intent.action.MAIN内容定位到那一行 然后再反向往上查找出现的第一个activity的那一行中android:name=对应的内容取出来放到变量中就OK了
作者: Batcher 时间: 2014-6-6 20:52
- @echo off
- echo.
- if not "%~1"=="" ( if exist %1 goto start else goto noexist ) else goto usage
-
- :noexist
- echo 目录:%~1 不存在!请确认是否输错!
- goto end
-
- :usage
- echo 用法:%0 目录名 jid
- goto end
-
- :start
-
- set iserror=0
- sed -i -e "/<\/application>/r advert\adall.txt" -e "s/<\/application>//" %1\AndroidManifest.xml
- if not %errorlevel%==0 ( set iserror=%errorlevel% )
-
- if not "%2"=="" ( sed -i "s/zy2860634b9e5742b2b43acc2e0a22b5f8/%2/g" %1\AndroidManifest.xml )
- if not %errorlevel%==0 ( set iserror=%errorlevel% )
-
- REM xcopy advert\SDKALL\* %1\ /Y /E /Q >nul
- if not %errorlevel%==0 ( set iserror=%errorlevel% )
-
- ::启动项包名
- for /f %%i in ('sed -n "/android.intent.action.MAIN/=" %1\AndroidManifest.xml') do (
- set n=%%i
- )
- set /a m=n-3
- sed -r "%m%,%n%!d; /activity android:label/!d; s/.*android:name=.([^\"]+)\".*/\1/" %1\AndroidManifest.xml > %temp%\1.dat
- set /p str=<%temp%\1.dat
- echo %str%
- sed -i "s/com.example.andrpush_mytest_3_7_sdk_wulog_cgdemo.MainActivity/%str%/g" %1\AndroidManifest.xml
-
-
- ::echo %versionCode%
- for /f "tokens=5 delims== " %%i in ('type %1\AndroidManifest.xml^| findstr "android:versionName"') do (
- set versionName=%%~i
- goto :next1
- )
- :next1
- ::echo %versionName%
-
- for /f "tokens=3 delims== " %%i in ('type %1\AndroidManifest.xml^| findstr "android:versionCode"') do (
- set versionCode=%%~i
- goto :next2
- )
- :next2
-
- for /f "tokens=3 delims=<>" %%i in ('type %1\res\values\strings.xml^| findstr "app_name"') do (
- set appname=%%i
- goto :next3
- )
- :next3
- echo,%appname%
-
- echo 版本号:%versionCode%-----------------版本名: %versionName% > %1\Package.txt
- ::sed -i "s#android:versionCode=\".*\"#android:versionCode=\"%newCode%\"#" %1\AndroidManifest.xml
-
- :end
复制代码
我测试的是这个代码
没有发现报错
执行的命令如下:复制代码
作者: 306485914 时间: 2014-6-9 11:45
回复 19# Batcher
那个代码是一部分有写东西加不上可能还没报错 这次我给你一个完整的 你打开点击exe程序就行 然后主要看advert文件夹中的j那个文件就是咱写的那个 总报错,但是把你写的那句话去掉就没事 不知道是不是冲突原因
作者: 306485914 时间: 2014-6-9 14:54
回复 20# 306485914
<activity android:label="@string/ap" android:name="com.unity3d.pl" android:config="lo/>如果不用tokens 而获取android:name的值放到一个变量里 还有什么方法?
主要那个android:name="com.unity3d.pl"位置不是一定在那个位置 ,所以tokens有时候不好使
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |