中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --
联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟
中国DOS联盟论坛
现在时间是 2026-08-18 04:59
47,814 主题排行 / 349,907 发帖 / 今日 4 篇 / 48,259 会员排行
DOS疑难解答 & 问题讨论 (解答室) » [求助]ECHO的一个文件固定位置插入行的命令
可打印版本  1,092 / 14
第1楼 mrhjzhang 发表于 2006-06-13 15:08
初级用户 发帖 39 积分 100
[求助]ECHO的一个文件固定位置插入行的命令
例如在winnt.sif中。

查找(findstr)
[unattend]
这一行
然后在后面加入
OemPnPDriversPath="Drv\000;Drv\001;Drv\002;Drv\003;Drv\004;Drv\005;Drv\0065;Drv\007;Drv\008"这一行。

我会用findstr查找。
但是echo好像只能在文件末尾加入。
能不能在固定位置插入,并且如何搭配findstr?
希望大虾指导一下,最好不用第三方工具。
第2楼 kcdsw 发表于 2006-06-13 18:23
中级用户 发帖 179 积分 404
呵呵 我刚解决了一个类似的问题 希望对你有帮助

第3楼 mrhjzhang 发表于 2006-06-13 20:20
初级用户 发帖 39 积分 100
谢谢楼上的,有点申奥^_^,过会儿尝试中
第4楼 kcdsw 发表于 2006-06-13 22:39
中级用户 发帖 179 积分 404
第5楼 mrhjzhang 发表于 2006-06-14 23:57
初级用户 发帖 39 积分 100
!m!这个语法不大懂
第6楼 mrhjzhang 发表于 2006-06-15 00:54
初级用户 发帖 39 积分 100
!m![ == %day%[
[作用也搞不懂。
第7楼 kcdsw 发表于 2006-06-15 12:24
中级用户 发帖 179 积分 404
%m% 启用变量延迟 后就需要!m! 来表达

!m![ == %day%[ 这样做的目的是防止其中一个参数为空时程序出错跳出
第8楼 mrhjzhang 发表于 2006-06-15 14:05
初级用户 发帖 39 积分 100
基本成功,通过这次,居然连for的用法,if else的用法都学会了。
就是[ == %day%[,[的用法好奇怪啊^_^

不过细节仍然在完善中。
主要是新文件会在每行后面多个空格。
还有就是空行被过滤了
第9楼 kcdsw 发表于 2006-06-15 15:17
中级用户 发帖 179 积分 404
空行的问题是这样 我也还没解决

多了个空格 是在你echo的语句出了问题 比如 echo 啊 >>a.txt
这样就会有空格


实际上那个if语句原来是这样的

if !m! == %day% (call :setp) & (echo %%s >>cover3.txt) else (echo %%s >>cover3.txt)


但是如果!m! 或者 %day% 为空的时候if语句会出错 所以加个

Last edited by kcdsw on 2006-6-15 at 15:19 ]
第10楼 mrhjzhang 发表于 2006-06-15 16:22
初级用户 发帖 39 积分 100
@echo off
setlocal EnableDelayedExpansion

set addpath=OemPnPDriversPath = "Drv\000;Drv\001;Drv\002;Drv\003;Drv\004;Drv\005;Drv\0065;Drv\007;Drv\008"
set m=0
set day=0


del /f /q end.txt >nul 2>nul
del /f /q temp.txt >nul 2>nul
for /f "tokens=*" %%t in (e:\xp\i386\winnt.sif) do echo %%t>>temp.txt
for /f "tokens=1 delims=:" %%i in ('findstr /i /n /p /c:"[Unattended]" temp.txt') do set day= %%i
cls

for /f "tokens=*" %%s in (temp.txt) do (
if !m![ == %day%[ ( (echo %addpath%>>end.txt) & (echo %%s>>end.txt)) else echo %%s>>end.txt
set /a m=!m! + 1
)

::: 以下是额外添加部分
@echo [GuiRunOnce]>>end.txt
@echo Command0=%systemdrive%\MyRun.bat>>end.txt

@echo [Networking]>>end.txt

@echo [NetAdapters]>>end.txt
@echo Adapter01 = params.Adapter01>>end.txt

@echo [params.Adapter01]>>end.txt

@echo [NetProtocols]>>end.txt
@echo MS_TCPIP = params.MS_TCPIP>>end.txt

@echo [params.MS_TCPIP]>>end.txt
@echo AdapterSections = params.MS_TCPIP.Adapter01>>end.txt

@echo [params.MS_TCPIP.Adapter01]>>end.txt
@echo SpecificTo = Adapter01>>end.txt
@echo IPAddress = 192.168.1.5>>end.txt
@echo SubnetMask = 255.255.255.192>>end.txt
@echo DefaultGateway = 192.168.1.1>>end.txt
@echo DNSServerSearchOrder = 192.168.1.1>>end.txt

del /f /q temp.txt >nul 2>nul
copy /y end.txt e:\xp\i386\winnt.sif >nul 2>nul
del /f /q end.txt >nul 2>nul

cls
rd /s /q "E:\XP\$OEM$"
rd /s /q "E:\ElictXP\backup"
rd /s /q "e:\xp\i386\lang"
xcopy /s /y "E:\ElictXP\Alternative\*.*" e:\xp\i386
xcopy /s /y "E:\ElictXP\$OEM$" e:\xp

exit
第11楼 mrhjzhang 发表于 2006-06-15 16:24
初级用户 发帖 39 积分 100
基本ok了。
刚才调试老错,郁闷的一塌糊涂,原来是
set day= %%i
写成了set day = %%i
结果有两个day变量(day、day )。
空格搞定,但是空行,艾,没办法。

谢谢kcdsw大虾
第12楼 mrhjzhang 发表于 2006-06-15 16:32
初级用户 发帖 39 积分 100
还有一些除了空行比较难的
1.;如何也也不过滤;号,
2.中文路径如何解决?(copy /y "E:\ElictXP\替换\*.*" e:\xp\i386)
-----------------
E:\XP>copy /y "E:\ElictXP\鏇挎崲\*.*" e:\xp\i386
系统找不到指定的路径。

3.$OEM$如何解决?(
E:\XP>rd "E:\XP\$OEM$"
拒绝访问。
-----------
xcopy /s /y "E:\ElictXP\$OEM$" e:\xp
也会只拷贝里面的目录。

4.由于某个文件如Driver.cab比较大,如果已经修改过了就不拷贝。
简单说请问如何实现有选择的拷贝(如果两个文件大小一样就不拷贝,不一样才拷贝)?

^_^
第13楼 kcdsw 发表于 2006-06-15 18:29
中级用户 发帖 179 积分 404
问题1: 没看明白
问题2: 我这里没见乱麻啊
问题3: 不知道,难道要加引号?
问题4: 用if + dir 判断修改时间!

[ Last edited by kcdsw on 2006-6-15 at 18:34 ]
第14楼 mrhjzhang 发表于 2006-06-15 18:38
初级用户 发帖 39 积分 100
问题3: 引号加了。
问题4: 可否用文件大小代替时间?
第15楼 kcdsw 发表于 2006-06-15 19:33
中级用户 发帖 179 积分 404
可以 看看dir的参数啊
[ 联系联盟系统管理团队 - 中国DOS联盟 - 标准版 ]
Sponsored by ifanr Inc | © 2001–2023