Board logo

标题: (已结)怎样将文件名保存到1批处理的指定位置? [打印本页]

作者: quan_zhou     时间: 2005-9-20 21:11    标题: (已结)怎样将文件名保存到1批处理的指定位置?

大家好! 
  请教大家一下,我在DOS 7.10下怎样才能怎样将文件名保存到1批处理的指定位置? 这样的批处理该台何写?
  如我要将34.txt的34保存到autoexec.bat 的 set run="位置“,
即set run=34。
             谢谢!

[ Last edited by willsort on 2005-9-25 at 00:16 ]
作者: Climbing     时间: 2005-9-21 18:29
你最好把问题的运行背景交待的更清楚些,例如你要实现什么功能,你打算如何实现等,或者有更好的解决办法。
作者: willsort     时间: 2005-9-22 19:31
Re quan_zhou:

      根据你的问题描述猜测,你并不需要把34写到autoexec.bat的set run=“位置”。因为一个能解决你问题的批处理程序,肯定首先可以获取 “34” 这个值,否则就没有可写的东西。而如果它可以获取 “34” 这个值,那么为什么不在这个批处理中直接
set run=34,而非要到 autoexec.bat 中 set run= 呢?如果你是想说,设置用的批处理只调用一次,而 autoexec.bat 需要每次执行,那么你如何保证 34 这个值发生变化时,autoexec 还能被正确的执行?

      所以,我的建议是:在 autoexec.bat 中 call 一个批处理程序,而这个批处理的作用就是找到 34 并 set 给 %run%,至于如何找到 34 就要看你的 34.txt 中到底是些什么内容了。
作者: quan_zhou     时间: 2005-9-23 11:17
非常感谢 Climbing / willsort 的关注!
这问题我查看贵论坛的贴已解决了,其实如will sort兄所说CALL另一批处理就能解决。
autoexec.bat想实现的功能就是:把1.txt与check.bat得出的%A%直接比较。
echo set file=%a% >b.bat //生成B.bat
在autoexec.bat增加内容如下:
call b.bat
compfile c:\1.txt %file%
若相同测运行指定程序
若不相同 Call check.bat
------------------------------
check.bat(已有)的功能是:DOS下把c:\1.txt与D:\sample1.txt至samplen.txt文件作比较,把与c:\1.txt内容相同的文件名设为变量%A%。
---------------------
备注:
     c:\1.txt是随机生成的可能每次生成的都不一样。

另外请教两位仁兄几个问题:
1、在DOS 7.10下能否把一文本的内容设为变量?
   s.tx的内容为1375905
  如set 1="s.txt的内容“
2、在在DOS 7.10下用什么方法可把3.txt 的内容改到4.txt那样
----- 3.txt------
13926584
13595464
13456931
13711364
------------------
-----4.txt-----
1:
13926584
2:
13595464
3:
13456931
4:
13711364
-------------------
   
  再次感谢大家的关注,谢谢!!!
作者: willsort     时间: 2005-9-23 19:00
Re quan_zhou:

      如果你 call b.bat 只是为了 set file=%a%,那可以直接将它写在 autoexec.bat 中,除非你的 %a% 不是引用环境变量,而是作为一种变量示意。进一步的疑惑是,为何不在 check.bat 中直接将取值设置到 %file% ,或者在 autoexec 中直接用 %a% 进行比较(compfile c:\1.txt %a%)?这样可以省略中间许多的转折。

      至于取文本文件内容到变量,这是一个曾谈论多次的话题,它取决于你的 s.txt 的复杂程度,以及你对获取目标的位置要求。如果 s.txt 中只含有一个单词,而你正是要取它,可以通过 date 或者 time 命令来获取它;如果你的 s.txt 复杂而多变,可以使用第三方工具,比如 LMOD 或者 gawk 等,strings 也可以考虑,它们的优点是使用简单,而且可以应付各种复杂的需求;如果你不能或不愿使用第三方工具,可以参考我过去贴过的关于文本遍历(文件遍历)的批处理程序。

      至于你提到的第二个替换问题,实际上与第一题是同类问题,也可以用 LMOD/GAWK或者我提到的批处理试试看。关于它们的用法和相关解释说明,过去的帖子中有很多,你可以搜索看看。
作者: quan_zhou     时间: 2005-9-23 22:16
willsort 兄:
    其实我这个做是以便下次启动直接将C:\1.txt上次check.bat 的%A%比较,若相同
运行指定程序,若不相同Call check.bat 找到与c:\1.txt相同的文件名存到%file%以便
下次启动后直接比较。
  以上的两个问题,不知能否劳烦willsort 兄帮我用LMOD写个简短的实例,因为我E文
超差,我只能用LMOD提取文件的部分内生另一文件,其它功能就不知该如何实现。

非常谢谢!
作者: willsort     时间: 2005-9-24 12:44
Re quan_zhou:

      其实我的英文也可以说是很差,很多东西都是硬着头皮看下来的。LMOD的主要作用将源文本根据指定的要求过滤、转换为目标文本,你能生成另一文件,其实就已经离将其保存到环境变量的要求很近了,你只需要在其前面加上一句set 1=并且将它生成到批处理中调用就可以实现了。

      题外话:感觉在 autoexec.bat 中使用 file a 1 s.txt 这些没有含义或含义过泛的变量或文件名字,有些过于随意了。请不要见怪

关于问题1的LMOD方案:
lmod set 1=[$1] < s.txt > _setvar.bat
if exist _setvar.bat for %%c in (call del) do %%c _setvar.bat
关于问题2的LMOD方案(因为不知道是否可以控制行号的输出位数,所以采用了二次过滤的方法,也许 Climbing 兄或其他熟悉 LMOD 的朋友有更好的办法):
lmod /l* [#]:[] < 3.txt | lmod /l* [3,2][+][5] > 4.txt
或者这样(它们是等效的,前者更符合书写习惯,后者较贴近阅读习惯):
< 3.txt lmod /l* [#]:[] | lmod /l* [3,2][+][5] > 4.txt
[ Last edited by willsort on 2005-9-24 at 12:48 ]
作者: quan_zhou     时间: 2005-9-24 17:01
willsort 兄:
              非常感谢你!你的回贴不但使我遇到问题得以解决,而且又能学到从书本中学不到的东西。
              至于“ 题外话”是我一个很不好习惯,做事随随便便的,多谢提醒。我一定
要把它给改过来。