Batch file 删除文本文件中包含“0”的行&引用;批处理文件

Batch file 删除文本文件中包含“0”的行&引用;批处理文件,batch-file,automation,Batch File,Automation,我有一个像这样的文本文件 /var/www/xxx/html/TEST/VIDEOS/video3.mp4 /var/www/xxx/html/TEST/video_folder_1/cideo.mp4 /var/www/xxx/TEST/video_folder_1/sadasd /var/www/xxx/html/TEST/video_folder_2/asdsadasdasdsadsadsadsadas /var/www/xxx/html/TEST/video_folder_2/cideo

我有一个像这样的文本文件

/var/www/xxx/html/TEST/VIDEOS/video3.mp4
/var/www/xxx/html/TEST/video_folder_1/cideo.mp4
/var/www/xxx/TEST/video_folder_1/sadasd
/var/www/xxx/html/TEST/video_folder_2/asdsadasdasdsadsadsadsadas
/var/www/xxx/html/TEST/video_folder_2/cideo2.mp4
/var/www/xxx/html/TEST/video_folder_2/sadsada
我希望它看起来像这样:

/var/www/xxx/TEST/video_folder_1/sadasd
/var/www/xxx/html/TEST/video_folder_2/asdsadasdasdsadsadsadsadas
/var/www/xxx/html/TEST/video_folder_2/sadsada
这样做的目的是删除任何具有扩展名的行。在这种情况下,即mp4

所以我猜它会在这行的末尾寻找4个字符,看看它是否有一个“.”


如果有,请删除该行。

这是一个vbs正则表达式替换程序。比FindStr强大得多。它以全局方式工作,因此您可以以线条端点为目标

Filter replace i "^.{10}^(.*^)$" "$1" < %windir%\win.ini
这是我的一个类似的基于生产线的而不是全球性的项目的帮助。重点是显示示例正则表达式

提取所有节标题,即没有等号的行

filter filter iv "=" < "%systemroot%\win.ini"

在批处理中,您应该能够以多种方式执行此操作:

findstr /V /L "." theFile.txt
正如Aacini所建议的,它检查行是否包含
,并且在测试时工作正常

如果要使用正则表达式

findstr /V /R "\....$" theFile.txt
通过检查一行是否以
***

最后,我建议使用以下方法:

findstr /V /R "\.[a-z0-9]*$" theFile.txt
检查行是否以任何类型的扩展名结尾,从而包括可能的4个字母扩展名

我已经测试了每一个,它们都工作得很好


我真的不知道为什么Serenity坚持使用VBscript,这无疑是一种很棒的语言,但对于像此批处理这样简单的事情,它要简单得多。

如果您想从中创建的输出中删除带有“.”的行,那么一个更简单的解决方案是在该代码中插入一个测试:

@echo off
setlocal EnableDelayedExpansion

(for /F "delims=" %%a in (test.txt) do (
   set "line=%%a"
   if "!line:~0,1!" equ "/" (
      set "header=%%a"
   ) else (
      if "!line:.=!" equ "!line!" echo !header:~0,-1!/%%a
   )
)) > testnew.txt

findstr/L/V“。theFile.txt
我可以让它与
findstr/L/V“mp4”theFile.txt一起工作,但在我使用
时不能。它不起作用。将其用作
\。mp4$
作为
表示任何字符,除非使用
\
转义。另外,
$
表示行尾。你用错语言了。如果感觉你是逆流而行,那么你就是逆流而行。编程应该很容易,如果不是,那么你的语言是错误的,或者你的程序设计是错误的。VBScript可以像控制台程序一样处理文件,也可以处理文件夹窗口中显示的对象(包括文件)。它也适用于处理文本和数据,不像批处理一样,批处理适用于处理文件名文件。它也不
Dir/b/s c:\boot
提供所需的结束状态(基于您的其他问题)。@Serenity-
Dir/b/s c:\boot
不会提供所需的结果,因为此列表来自使用FTP.exe的FTP。实际上是文本文档中的一个列表。因为他已经问了1000个关于正确输出的问题。如果你读了所有的,而不是一个中间步骤。。。。在VBScript中,他可以使用递归遍历每个文件夹,对每个文件执行他想要的操作。这将是一个简短的节目。我本来会回答这个问题的,但规格分布在1000多个问题上。至少他在学习。我喜欢那些想学习的人。他还需要从一行中提取文本,并在其他行中预编。一个全局正则表达式更好,因为findstr不是…@Serenity,好吧,不是1000,但我知道你的意思:)。我正在做的这个过程对我来说有点复杂,但是最好是将功能分解,一点一点,因为其他人可以从与完整解决方案相反的小功能部分中学习。然而,事情是这样的`连接到FTP>下载特定文件夹的目录列表>制作txt文件(我想要一个数组)>获取作为文件名的变量>搜索文本文件夹并匹配变量名>仅将该行复制到批处理中作为新的变量>美国重命名以将vid移动到正确的文件夹。非常感谢。我尝试一下,但是VB不是我的堡垒,尽管如此,这是一个很好的改进方法。你的问题可以用几种方法解决。使用全局正则表达式,您可以搜索一行文本,记住该行,然后将其插入其他位置。我还可以使用VBScript从ftp.microsoft.com
…html头文件中获取此文件。。。FTP目录/Softlib/at FTP.microsoft.com
欢迎访问FTP.microsoft.com。也访问http://www.microsoft.com/downloads.

05/10/2000 12:48PM 205710 04/30/2010 10:10AM目录09/03/1999 01:03PM 2401
,您可以加载并浏览锚集合。脚本在这里。要获取目录列表网页,只需请求文件夹而不是文件。
Filter replace i "^.{10}^(.*^)$" "$1" < %windir%\win.ini
Filter replace i "^.+,^(.+^),.+,^(.+^)$" "$1,$2" < csv.txt
On Error Resume Next
Set ShellApp = CreateObject("Shell.Application")
ReportErrors "Creating Shell.App"
set WshShell = WScript.CreateObject("WScript.Shell")
ReportErrors "Creating Wscript.Shell"
Set objArgs = WScript.Arguments
ReportErrors "Creating Wscript.Arg"
Set regEx = New RegExp
ReportErrors "Creating RegEx"
Set fso = CreateObject("Scripting.FileSystemObject")
ReportErrors "Creating FSO"

If objArgs.Count = 0 then
        wscript.echo "No parameters", 16, "Serenity's ReplaceRegExp"
        ReportErrors "Help"
ElseIf objArgs.Count = 1 then
        wscript.echo "Only one parameter", 16, "Serenity's ReplaceRegExp"
        ReportErrors "Help"
ElseIf objArgs.Count = 2 then
        Set srcfile = fso.GetFile(objArgs(0))
        ReportErrors "srcFile"
        If err.number = 0 then Set TS = srcFile.OpenAsTextStream(1, 0)
        If err.number <> 0 then
            wscript.echo err.description & " " & srcFile.path, 48, "Serenity's Search" 
            err.clear
        else
            ReportErrors "TS" & "     " & srcFile.path
            Src=ts.readall
            If err.number = 62 then
                err.clear
            else
                ReportErrors "ReadTS" & "     " & srcFile.path
                regEx.Pattern = objArgs(1) 
                regEx.IgnoreCase = True
                regEx.Global = True
                If regEx.Test(Src) = True then
                    wscript.echo "Found in " & srcfile.path, 64, "Serenity's Search" 
                End If
            End If
        End If
        ReportErrors "Check OK" & "     " & srcFile.path

Elseif objArgs.count = 3 then
        Set srcfile = fso.GetFile(objArgs(0))
        ReportErrors "srcFile"
        If err.number = 0 then Set TS = srcFile.OpenAsTextStream(1, 0)
        If err.number <> 0 then
            wscript.echo err.description & " " & srcFile.path, 48, "Serenity's Search" 
            err.clear
        else
            ReportErrors "TS" & "     " & srcFile.path
            Src=ts.readall
            If err.number = 62 then
                err.clear
            else
                ReportErrors "ReadTS" & "     " & srcFile.path
                regEx.Pattern = objArgs(1) 
                regEx.IgnoreCase = True
                regEx.Global = True
                NewSrc= regEx.Replace(Src, objArgs(2)) 
                If NewSrc<>Src then
                    wscript.echo "Replacement made in " & srcfile.path, 64, "Serenity's Search" 
                    TS.close
                    Set TS = srcFile.OpenAsTextStream(2, 0)
                    ts.write newsrc
                    ReportErrors "Writing file"
                End If
            End If
        End If
        ReportErrors "Check OK" & "     " & srcFile.path


Else
        wscript.echo "Too many parameters", 16, "Serenity's ReplaceRegExp"
        ReportErrors "Help"

ReportErrors "All Others"
End If

Sub ReportErrors(strModuleName)
    If err.number<>0 then wscript.echo "An unexpected error occurred. This dialog provides details on the error." & vbCRLF & vbCRLF & "Error Details " & vbCRLF & vbCRLF & "Script Name" & vbTab & Wscript.ScriptFullName & vbCRLF & "Module" & vbtab & vbTab & strModuleName & vbCRLF & "Error Number" & vbTab & err.number & vbCRLF & "Description" & vbTab & err.description, vbCritical + vbOKOnly, "Something unexpected"
    Err.clear
End Sub
Character Description 
\ Marks the next character as either a special character or a literal. For example, "n" matches the character "n". "\n" matches a newline character. The sequence "\\" matches "\" and "\(" matches "(". 
^ Matches the beginning of input. 
$ Matches the end of input. 
* Matches the preceding character zero or more times. For example, "zo*" matches either "z" or "zoo". 
+ Matches the preceding character one or more times. For example, "zo+" matches "zoo" but not "z". 
? Matches the preceding character zero or one time. For example, "a?ve?" matches the "ve" in "never". 
. Matches any single character except a newline character. 
(pattern) Matches pattern and remembers the match. The matched substring can be retrieved from the resulting Matches collection, using Item [0]...[n]. To match parentheses characters ( ), use "\(" or "\)". 
x|y Matches either x or y. For example, "z|wood" matches "z" or "wood". "(z|w)oo" matches "zoo" or "wood". 
{n} n is a nonnegative integer. Matches exactly n times. For example, "o{2}" does not match the "o" in "Bob," but matches the first two o's in "foooood". 
{n,} n is a nonnegative integer. Matches at least n times. For example, "o{2,}" does not match the "o" in "Bob" and matches all the o's in "foooood." "o{1,}" is equivalent to "o+". "o{0,}" is equivalent to "o*". 
{ n , m } m and n are nonnegative integers. Matches at least n and at most m times. For example, "o{1,3}" matches the first three o's in "fooooood." "o{0,1}" is equivalent to "o?". 
[ xyz ] A character set. Matches any one of the enclosed characters. For example, "[abc]" matches the "a" in "plain". 
[^ xyz ] A negative character set. Matches any character not enclosed. For example, "[^abc]" matches the "p" in "plain". 
[ a-z ] A range of characters. Matches any character in the specified range. For example, "[a-z]" matches any lowercase alphabetic character in the range "a" through "z". 
[^ m-z ] A negative range characters. Matches any character not in the specified range. For example, "[m-z]" matches any character not in the range "m" through "z". 
\b Matches a word boundary, that is, the position between a word and a space. For example, "er\b" matches the "er" in "never" but not the "er" in "verb". 
\B Matches a non-word boundary. "ea*r\B" matches the "ear" in "never early". 
\d Matches a digit character. Equivalent to [0-9]. 
\D Matches a non-digit character. Equivalent to [^0-9]. 
\f Matches a form-feed character. 
\n Matches a newline character. 
\r Matches a carriage return character. 
\s Matches any white space including space, tab, form-feed, etc. Equivalent to "[ \f\n\r\t\v]". 
\S Matches any nonwhite space character. Equivalent to "[^ \f\n\r\t\v]". 
\t Matches a tab character. 
\v Matches a vertical tab character. 
\w Matches any word character including underscore. Equivalent to "[A-Za-z0-9_]". 
\W Matches any non-word character. Equivalent to "[^A-Za-z0-9_]". 
\num Matches num, where num is a positive integer. A reference back to remembered matches. For example, "(.)\1" matches two consecutive identical characters. 
\ n Matches n, where n is an octal escape value. Octal escape values must be 1, 2, or 3 digits long. For example, "\11" and "\011" both match a tab character. "\0011" is the equivalent of "\001" & "1". Octal escape values must not exceed 256. If they do, only the first two digits comprise the expression. Allows ASCII codes to be used in regular expressions. 
\xn Matches n, where n is a hexadecimal escape value. Hexadecimal escape values must be exactly two digits long. For example, "\x41" matches "A". "\x041" is equivalent to "\x04" & "1". Allows ASCII codes to be used in regular expressions. 
Go to top of page 
findstr /V /L "." theFile.txt
findstr /V /R "\....$" theFile.txt
findstr /V /R "\.[a-z0-9]*$" theFile.txt
@echo off
setlocal EnableDelayedExpansion

(for /F "delims=" %%a in (test.txt) do (
   set "line=%%a"
   if "!line:~0,1!" equ "/" (
      set "header=%%a"
   ) else (
      if "!line:.=!" equ "!line!" echo !header:~0,-1!/%%a
   )
)) > testnew.txt