我对batch有个问题,但我没办法支持它。我搜索了几个小时的Google和Stack溢出,现在我自己问这个问题,因为似乎没有人有这个确切的问题,或者我根本找不到它。我甚至在Google (!)上搜索了最后的结果页面。
因此,我编写了一个批处理文件,自动从服务器中提取文件名,并将它们与文件路径一起放入文本文件中。现在,我有了一个大致如下的文件:
q:\0003730310008520150610120508\1_PY98200_00084_00085_09_20150610_140447.antfzg
q:\000649A7B0008520150630085701\1_KP40610_00084_00085_09_20150630_105647.antfzg
q:\000649A7B0008520150630085701\1_KP40610_00084_00085_09_20150630_110508.antfzg
q:\00161083B0008520150429065335\1_J281516_00084_00085_09_20150429_085326.antfzg
q:\00161083B0008520150429122000\1_PV92717_00084_00085_09_20150429_141952.antfzg
q:\00161083B0008520150515065834\1_VY65621_00084_00085_09_20150515_085802.antfzg
q:\00161083B0008520150527075722\1_D894693_00084_00085_09_20150527_095704.antfzg
q:\00161083B0008520150602075809\1_L893216_00084_00085_09_20150602_095757.antfzg
q:\00161083B0008520150608082553\1_VT04798_00084_00085_09_20150608_102033.antfzg
q:\00161083B0008520150610080050\1_LF22563_00084_00085_09_20150610_100016.antfzg
q:\00161083B0008520150623132003\1_VN57593_00084_00085_09_20150623_151927.antfzg
现在,我想在第一个示例中搜索一个类似于此的特定文章编号:PY98200
(1_
后面的部分)。如果在文件中找到这一点,请将包含字符串的整行复制到一个新变量或一个新文本文件中。如果这个数字存在多次,那么所有的行也应该被复制。
我尝试了不同的用于循环,但是失败了,因为我对批处理编码没有那么丰富的经验。
发布于 2015-08-09 09:57:40
尼泊玛卡发布的此任务的命令行是:
type "original_text_file.txt" | %SystemRoot%\System32\find.exe "PY98200" > "new_text_file.txt"
它是如何工作的?
类型是命令处理器cmd.exe
的内部命令,它将文本文件的内容输出到通常显示在控制台窗口的stdout (标准输出)。
类型的输出为管状和|
,从类型的stdout到标准Windows控制台应用程序的stdinE 215(标准输入)E 116
查找E 217
。
发现是一个非常小的控制台应用程序,用于在文本文件的行中查找简单的、非正则表达式字符串,默认情况下,该字符串输出到stdout包含搜索字符串的所有行。在文件中查找字符串的一个更强大的控制台应用程序是findstr。但是find也有此任务所需的特性。
find的输出被>
重定向到当前目录中的new_text_file.txt
文件。
为什么不直接用文本文件的名称调用find呢?
%SystemRoot%\System32\find.exe "PY98200" "original_text_file.txt" > "new_text_file.txt"
使用上面的命令行,find输出一个空行和另一个包含文件名的行,在包含搜索字符串的行之前。如果在多个文件中搜索包含字符串的行,并且在输出中知道哪些行来自哪个文件,这是非常有用的。
但是new_text_file.txt
应该只包含包含PY98200
的行,而不包含任何关于源的其他信息。因此,使用类型命令通过stdin让查找读取original_text_file.txt
的内容,这避免了打印每个文件的查找输出到文件new_text_file.txt
的两个标题行。
用于此任务的另一个命令行是:
%SystemRoot%\System32\findstr.exe /C:PY98200 "original_text_file.txt" > "new_text_file.txt"
有关使用的命令(分别为控制台应用程序)的详细信息,请打开命令提示符窗口,执行以下命令,并将每个命令输出的所有帮助页读入控制台窗口。
type /?
find /?
findstr /?
Windows的所有标准命令/控制台应用程序都帮助使用参数/?
运行它们,对于某些命令来说,这比联机文档更准确。
https://stackoverflow.com/questions/31608362
复制相似问题