Articles of batch file

批量检查最后打印的行是否包含单词

我有2个batch filea.bat和b.bat。 a.bat调用b.bat和b.bat在屏幕上打印一个句子。 我怎样才能检查这句话,看它是否包含一个单词,如果它包含一个集合作为一个variables。 例如 Sentance: Hello, how are you today? If %Sentance contains% Hello set var=Hello If %Sentance contains% Hi set var=hi 屏幕上可能有多个Sentance,所以我想检查最近显示的传送。 这是我的。 for /f delims^=^ eol^= %%i in ('b.bat') do set lastline=%%i set "var=" echo %lastline%|findstr /i "\<hi\>">nul && set "var=hi" IF ERRORLEVEL 1 (GOTO NEXT0) ELSE (GOTO FOUND) :NEXT0 echo %lastline%|findstr […]

冷凝如果声明batch file

我有这个批处理脚本有很多“if语句”。 这里有几行我有什么: if %c%==PC exit if %c%==pc exit if %c%==CMD exit if %c%==cmd exit if %c%==MENU exit if %c%==menu exit if %c%==KILL exit if %c%==kill exit 有更多的可能性,如果可能的话,真的可以使用一些简化。 那么有没有办法可以简化这个? 也许类似,如果variablesc等于任何这些退出。 甚至使if语句的情况变得不可信这可能吗? 真的,任何简化这个方法都会很棒,可以大大减less我的批处理脚本的大小。 一对夫妇侧面说明 这个代码已经可以工作,除了冷凝它之外,不需要编辑。 我知道这里有类似的问题,但我不知道如何将其应用于我的问题。

Windows批处理在主机文件中添加/replace条目

我读了这个主题第一步是有用的开始。 我可以添加几行到我的主机文件。 我正在尝试,没有成功,search和正则expression式replacestring。 例如,如果我的主机文件包含“SOMEIP website.com”,我想修改这一行以获得“NEWIP website.com”。 我可以find如果一行包含“website.com”,我目前不知道(如果可能)如何获得该行,并通过正则expression式模式replaceIP地址。 %windir%\system32\FIND /C /I "website.com" %hostpath% >nul IF %ERRORLEVEL% NEQ 0 ECHO %NEWLINE%^%server% website.com>>%hostpath% 我迷路了,所以谢谢你的回答:)

FORFILES date -after-(cmd文件中的date计算)

我想在一个cmd文件中使用FORFILES,在给定的date之后通过“today”来处理所有文件。 我可以使用forfiles /d +07/10/2013 /c "cmd /c echo @fname"东西在7/10/13之后执行,但是我想要的只是从90天开始计算在“今天”之前。 是否有一个date计算的语法,将在一个cmd文件,将让我指定“今天之前x天”饲料到FORFILES? 我更喜欢不使用VBS(并且发现了可以在VBS中工作的代码片段),不过我可以重写Powershell脚本,但理想情况下我想使用cmd。 为了澄清,“-90”会find所有超过90天的文件; “+90”会发现所有文件比今天晚了90天(这基本上是无用的,因为文件很less会在未来的date编写),“+7 / 30/2013”​​会查找所有比7/30更新的文件/ 2013。 我想要最后一段时间,最好能够传递给CMD文件的天数variables,也就是说“在今天之前x天之后”,即“在最近x天”。 所以,而不是如上所示使用硬编码的date,我希望能够在cmd文件中计算该date。

batch file来分割.csv文件

我有一个非常大的.csv文件(> 500MB),我希望在命令提示符下将其分解为更小的.csv文件。 (基本上试图在Windows中find一个Linux“分裂”function“。 这必须是一个批处理脚本,因为我的机器只安装了Windows,而且请求软件是一件痛苦的事情。 我遇到了一些示例代码( http://forums.techguy.org/software-development/1023949-split-100000-line-csv-into.html ),但是,当我执行批处理时,它不起作用。 我所得到的是一个输出文件,当我请求parsing每20000行时,它只有125kb。 有没有人遇到类似的问题,你是如何解决这个问题?

用Windows批处理脚本重命名目录中的所有文件

我将如何编写一个批处理或cmd文件,将重命名目录中的所有文件? 我正在使用Windows。 改变这个: 750_MOT_Forgiving_120x90.jpg 751_MOT_Persecution_1_120x90.jpg 752_MOT_Persecution_2_120x90.jpg 753_MOT_Hatred_120x90.jpg 754_MOT_Suffering_120x90.jpg 755_MOT_Freedom_of_Religion_120x90.jpg 756_MOT_Layla_Testimony_1_120x90.jpg 757_MOT_Layla_Testimony_2_120x90.jpg 对此: 750_MOT_Forgiving_67x100.jpg 751_MOT_Persecution_1_67x100.jpg 752_MOT_Persecution_2_67x100.jpg 753_MOT_Hatred_67x100.jpg 754_MOT_Suffering_67x100.jpg 755_MOT_Freedom_of_Religion_67x100.jpg 756_MOT_Layla_Testimony_1_67x100.jpg 757_MOT_Layla_Testimony_2_67x100.jpg

如何最小化我的bat文件中的命令提示符

我有这个bat文件,当我运行它时,我想最小化cmd窗口: @echo off cd /d C:\leads\ssh call C:\Ruby192\bin\setrbvars.bat ruby C:\leads\ssh\put_leads.rb 基本上我想立即将命令窗口最小化。 任何想法如何做到这一点?

正则expression式在日志文件内匹配,返回匹配上下的dynamic内容

我有一些格式如下的catchall日志文件: timestamp event summary foo details account name: userA bar more details timestamp event summary baz details account name: userB qux more details timestamp etc. 我想searchuserB的日志文件,如果find,从前面的时间戳回显到(但不包括)下面的时间戳。 可能会有几个匹配我的search的事件。 回应某种— start —和— end —围绕每场比赛将是很好的。 这对于pcregrep -M来说是完美的,对吗? 问题是,GnuWin32的pcregrep崩溃与多行正则expression式search大文件,这些pcregrep日志可以是100兆或更多。 我试过了 到目前为止,我的解决方法是使用grep -B15 -A30来find匹配的行并打印周围的内容,然后将现在更易于pipe理的块pcregrep到pcregrep进行打磨。 问题是一些事件不到十行,而另一些事件是30或更多; 在遇到较短的事件时,我会得到一些意想不到的结果。 :parselog <username> <logfile> set silent=1 set count=0 set deez=20\d\d-\d\d-\d\d \d\d:\d\d:\d\d echo Searching %~2 for […]

DOS批处理脚本与for循环和pipe道

我想所有的文件名不包含单词“摘要”的目录中的CSV文件。 在命令提示符下,我可以input以下命令 dir /b my_dir\*.csv | find /V "summary" 当我尝试将上述命令转换为batch file时,遇到了一个问题,那就是for循环中不支持pipe命令。 那是我不能做到以下几点 FOR /f %%A in ('dir /b my_dir\*.csv | find /V "summary"') do ( rem want to do something here ) 有人能告诉我如何解决上面的问题吗? 提前致谢!

通过batch file在GIT中创build修改文件的存档

我正在使用这个git命令来创build在特定提交中修改的文件的存档: git archive -o update.zip HEAD $(git diff –name-only COMMITID^) 其中COMMITID是我要归档的提交的ID。 这从命令行工作正常,但我想从batch file运行它。 以下是我正在使用的batch file的内容: git archive -o update.zip HEAD $(git diff –name-only %1^^) 其中%1是通过SourceTree传入的提交ID。 我遇到的问题是,从batch file运行时,此命令返回以下错误: 错误:未知选项`name-only' 我猜可能会有一些字符转义的问题,但我无法find具体的中断。 我将如何编写该git命令,以便它可以从batch file中工作? UPDATE 我尝试删除–name-only选项,并通过SourceTree尝试批处理脚本时收到以下错误: 致命的:找不到path:$(git 希望这有助于缩小可能发生的事情。 进一步更新 原来我的语法只是从特定的提交抓取修改的文件,但使用msandiford的答案是错误的我想出了这个batch file脚本,完美的作品: setlocal enabledelayedexpansion set output= for /f "delims=" %%a in ('git diff-tree –no-commit-id –name-only -r %1^^') do ( […]