标题: [文件操作] [已解决]BAT怎样批量单个读取、删除、转移txt文件? [打印本页]
作者: kobekiln 时间: 2013-12-9 21:06 标题: [已解决]BAT怎样批量单个读取、删除、转移txt文件?
本帖最后由 kobekiln 于 2013-12-11 15:52 编辑
各位大神好
小弟前来求助问题:
我自己变了两个程序,存放为“e:\network data\p1.exe”和“e:\network data\p2.exe”,这两个程序需要读取“e:\network data\file0\”下的txt文件(参数设定文件)来计算算例。
程序的计算结果分别存放于“e:\network data\file1”和“e:\network data\file2”下面。
现在我想批量计算算例,所以放了n个txt(tj.txt tj1.txt tj2.txt……tjn.txt)在 file0中,我想实现这个循环过程:
1:检查file0中有无文件,若有则继续,若没有文件则结束,
2:运行p1.exe
3:当p1.exe运行结束后,再运行p2.exe
4:当p2.exe运行结束后,在network data下新建一个文件夹filex(x随着循环次数增加而变化,保证不同算例的结果存于不同的文件夹),将file1和file2中的所有文件剪切到filex下面,若存在文件重名,则更名保存
5:删除file0中的tj.txt,将file0下的第一个txt文件(或者是将tjx.txt,x随着循环次数增加而变化,保证每次都将下一个算例的参数文件重命名为 tj.txt,)重命名为tj.txt
6:重新跳到第一步。
有点复杂啊,真心求助大神帮忙。
我重新想了想,整个过程应该是这样比较好:
1:检查file0中有无文件,若有则继续,若没有文件则结束,
2:将file0下的第一个txt文件(或者是将tjx.txt,x随着循环次数增加而变化,保证每次都将这个算例的需要参数文件重命名为 tj.txt,)重命名为tj.txt
3:运行p1.exe
4:当p1.exe运行结束后,再运行p2.exe
5:当p2.exe运行结束后,在network data下新建一个文件夹filex(x随着循环次数增加而变化,保证不同算例的结果存于不同的文件夹),将file1和file2中的所有文件剪切到filex下面,若存在文件重名,则更名保存
6:删除file0中的tj.txt
7:重新跳到第一步。
作者: apang 时间: 2013-12-10 00:48
本帖最后由 apang 于 2013-12-10 09:37 编辑
- Set fso = CreateObject("Scripting.FileSystemObject")
- f = "" : path = "E:\network data"
- For Each file in fso.GetFolder(path & "\file0").Files
- If LCase(Right(file.Name,4)) = ".txt" and _
- LCase(file.Name) <> "tj.txt" Then f = file : Exit For
- Next
-
- If f <> "" Then
- fso.GetFile(path & "\file0\tj.txt").Delete
- fso.GetFile(f).Name = "tj.txt"
- Else WScript.Quit
- End If
-
- Set ws = CreateObject("WScript.Shell")
- ws.Run chr(34) & path & "\P1.EXE" & chr(34),,true
- ws.Run chr(34) & path & "\P2.EXE" & chr(34),,true
-
- n = 3
- While fso.FolderExists(path & "\file" & n)
- n = n + 1
- Wend
-
- strNewFolder = path & "\file" & n
- fso.CreateFolder(strNewFolder)
-
- fso.MoveFile path & "\file1\*",strNewFolder & "\"
- For Each file in fso.GetFolder(path & "\file2").Files
- strNewFile = file.Name
- While fso.FileExists(strNewFolder & "\" & strNewFile)
- strNewFile = "BAK_" & strNewFile
- Wend
- fso.GetFile(file).Move strNewFolder & "\" & strNewFile
- Next
复制代码
保存为test.vbs
如果存在同名文件,则在原文件名前加"BAK_"字样。
作者: lifei259 时间: 2013-12-10 01:41
- @echo off
- setlocal EnableDelayedExpansion
- for /r file0 %%i in (tj*.txt) do (set /a n+=1
- ren "%%~fi" "tj.txt" 2>nul
- start /w p1.exe
- start /w p2.exe
- md fileX!n! 2>nul
- move file1\*.* fileX!n!
- move file2\*.* fileX!n!
- del /a /f /q "%%~dpitj.txt"
- )
- pause
复制代码
代码放在e:\network data\下运行。
因为有了Feli0 Feli1 Feli2 所以FeliX没有从0 开始,为了对应次数,文件名改成Filx1~FelixN这样才能行。
作者: kobekiln 时间: 2013-12-10 08:53
回复 2# apang
谢谢大神!我来试试!
作者: kobekiln 时间: 2013-12-10 08:54
回复 3# lifei259
谢谢大神,一会儿试试!
作者: kobekiln 时间: 2013-12-10 09:43
回复 2# apang
大神,好像还是有些问题啊。可以私下请教你一下嘛
作者: apang 时间: 2013-12-10 10:15
回复 6# kobekiln
2:将file0下的第一个txt文件(或者是将tjx.txt,x随着循环次数增加而变化,保证每次都将这个算例的需要参数文件重命名为 tj.txt,)重命名为tj.txt
"第一个txt"是如何确定的?tjx.txt中的x又是如何确定的呢?与filex中的x值一样吗?
作者: kobekiln 时间: 2013-12-10 11:04
本帖最后由 kobekiln 于 2013-12-10 14:06 编辑
回复 7# apang
如果我将tj1.txt tj2.txt……tjx.txt按名称排列。那么该文件夹下第一个文件就是我这个算例要用的文件了。tjx.txt和filex的值应该是不一样的,主要目的是将各个算例的结果按顺序存放在不同的文件夹中就好了,可以这样,tj1算的结果放在file3中,tj2算的结果放在file4中,这样。
谢谢大神,
作者: kobekiln 时间: 2013-12-10 11:05
回复 7# apang
原来是vbs...我说怎么不管用,我再试试,谢谢大神!
作者: kobekiln 时间: 2013-12-10 14:32
回复 2# apang
大神,您这个程序我测试了,很棒啊!可以运行,达到了一些效果。但是好像存在点问题,
1,您的只有在file0文件夹中有 “tj.txt”时,程序才能继续。我是想,只要file0中有txt文件存在就继续到第二步“重命名的部分”
2,您的程序只循环一次就结束了,不知道是为啥。
我是这样的。我的的p1 p2程序需要读取file0中名为tj.txt的文件来设置参数进行计算,计算结果存放在file1和file2中。
我是想批量计算n个算例,所以把n个txt(tj1.txt tj2.txt tj3.txt …… tjn.txt) 放在file0文件夹内。我想让这个批处理命令,能够首先把tj1重名命成 tj.xt 然后 运行p1 p2程序
计算, 然后把每个算例的计算结果放在一个新的文件夹(例如file3)内,然后删掉file0中这个已经用过tj.txt。接下来把file0中的tj2.txt重命名为tj.txt,继续开 p1 p2计算,结果放到新的文件夹
(例如file4)内。如此循环。
谢谢大神!!
作者: apang 时间: 2013-12-10 22:38
越弄越复杂了- Set fso = CreateObject("Scripting.FileSystemObject")
- Do
- f = "" : path = "E:\network data"
- For Each file in fso.GetFolder(path & "\file0").Files
- If LCase(Right(file.Name,4)) = ".txt" Then f = file : Exit For
- Next
- If f = "" Then WScript.Quit
- call main()
- Loop
-
- function main()
- If LCase(fso.GetFile(f).Name) <> "tj.txt" Then
- If fso.FileExists(path & "\file0\tj.txt") Then
- fso.GetFile(path & "\file0\tj.txt").Delete
- End If
- fso.GetFile(f).Name = "tj.txt"
- End If
- Set ws = CreateObject("WScript.Shell")
- ws.Run chr(34) & path & "\P1.EXE" & chr(34),,true
- ws.Run chr(34) & path & "\P2.EXE" & chr(34),,true
-
- n = 3
- While fso.FolderExists(path & "\file" & n)
- n = n + 1
- Wend
-
- strNewFolder = path & "\file" & n
- fso.CreateFolder(strNewFolder)
-
- fso.MoveFile path & "\file1\*",strNewFolder & "\"
- For Each file in fso.GetFolder(path & "\file2").Files
- strNewFile = file.Name
- While fso.FileExists(strNewFolder & "\" & strNewFile)
- strNewFile = "BAK_" & strNewFile
- Wend
- fso.GetFile(file).Move strNewFolder & "\" & strNewFile
- Next
- fso.GetFile(path & "\file0\tj.txt").Delete
- End function
复制代码
作者: kobekiln 时间: 2013-12-11 15:52
回复 11# apang 大神你太吊了!!!
欢迎光临 批处理之家 (http://bathome.net./) |
Powered by Discuz! 7.2 |