Articles of batch file

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 ( […]

如何检查“.bat”文件中的命令行参数?

我的操作系统是Windows Vista。 我需要一个“.bat”文件,我需要检查用户是否input任何命令行参数。 如果那么如果参数等于-b那么我会做一些事情,否则我会标记“无效的input”。 如果用户没有input任何命令行参数,那么我会做一些事情。 我创build了以下.bat文件。 它适用于-b和不等于-b情况,但在用户不传递任何命令行参数时失败。 我总是得到错误: GOTO was unexpected at this time. 谁能告诉我我在这里做错了什么? ECHO OFF CLS ECHO. IF [%1]==[/?] GOTO BLANK IF %1=="-b" GOTO SPECIFIC IF NOT %1=="-b" GOTO UNKNOWN :SPECIFIC ECHO SPECIFIC GOTO DONE :BLANK ECHO No Parameter GOTO DONE :UNKNOWN ECHO Unknown Option GOTO DONE :DONE ECHO Done!

如何正确报告批量退出状态?

我正面临一个奇怪的情况,我写的batch file报告了一个不正确的退出状态。 这里是一个重现问题的最小样本: bug.cmd echo before if "" == "" ( echo first if exit /b 1 if "" == "" ( echo second if ) ) echo after 如果我运行这个脚本(使用Python,但实际上也是以其他方式启动时发生的问题),下面是我得到的: python -c "from subprocess import Popen as po; print 'exit status: %d' % po(['bug.cmd']).wait()" echo before before if "" == "" ( echo first if […]

Windows cmd:回声没有新行,但与CR

我想写在一个窗口batch file中的循环内同一行。 例如: setlocal EnableDelayedExpansion set file_number=0 for %%f in (*) do ( set /a file_number+=1 echo working on file number !file_number! something.exe %%f ) setlocal DisableDelayedExpansion 这将导致: 回声在文件号码1上工作 回声在文件2上工作 回声工作文件号码3 。 。 。 我希望他们都在同一条线上。 我发现一个黑客删除新行(例如在这里: Windows批处理:回声没有新行 ),但这将产生一个长行。 谢谢!

batch file从SFX运行时的行为不同

所以我写了一个batch file,将客户端转换成云服务,我看到了一些奇怪的行为。 所以这基本上寻找一个特定的文件夹,是否存在它使用GOTO继续前进。 当我使用WinRAR将其压缩到SFX并指示它运行batch file时,它从不检测文件夹,但是,当我运行batch file本身时,总是检测文件夹,无论是否存在。 我一直试图弄清楚这几天,我只是不明白为什么会发生这种情况。 @ECHO Off CD %~dp0 Goto DisableLocal :DisableLocal IF EXIST "%ProgramFiles%\Server\" ( GOTO Server ) ELSE ( GOTO Config )

在控制台上打印通过subprocess.check_output调用的可执行文件,但不返回结果

在Windows机器上,我试图从Python调用一个外部可执行文件并收集它的输出以进一步处理。 由于必须在调用可执行文件之前设置本地pathvariables,因此我创build了一个批处理脚本 首先调用另一个脚本来设置%PATH%和 然后使用给定的参数调用可执行文件。 * .bat文件如下所示: @echo off call set_path.bat @echo on executable.exe %* 和这样的Python代码: print("before call"); result = subprocess.check_output([batfile, parameters], stderr=subprocess.STDOUT, shell=True); print("after call"); print("——- ——- ——- printing result ——- ——- ——- "); print(result); print("——- ——- ——- /printing result ——- ——- ——- "); 现在,从技术上讲,这是有效的。 可执行文件被调用的目标参数,运行,完成并产生结果。 我知道这一点,因为他们被嘲笑地显示在Python脚本运行的控制台中。 但是,结果string只包含批处理脚本返回的内容,而不包含可执行文件输出: 打电话之前 你好? 是的,这是executable.exe 打完电话后 ——- ——- ——-打印结果——- […]

如何在batch file中使用符号%,&,=?

这是我为重命名文件而写的batch file。 我得到的问题是,如果文件名包括下列符号之一,该脚本不起作用。 % & = @echo off SETLOCAL set file="C:\Users\Desktop\newdocument.txt" SET file1=%file: =% FOR /f %%i IN ("%file1%") DO ( set fileextension=%%~xi ) REN %file% "newname%fileextension%"

在Windows中,2 <&1和2>&1有什么区别?

这个页面中的例子和解释让我感到困惑: http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/redirection.mspx?mfr=true 使用2 <&1和2>&1有什么实际的区别? 第二种forms(2>&1)对于我来说是熟悉的,从与Unix shell的工作。 上面链接的页面有: 要查找File.txt,然后将句柄1(即STDOUT)和句柄2(即STDERR)redirect到Search.txt,请键入: findfile file.txt> search.txt 2 <&1 并且 要将所有输出(包括句柄2(即STDERR))从ipconfig命令redirect到处理1(即STDOUT),然后将输出redirect到Output.log,请键入: ipconfig.exe >> output.log 2>&1 最后,结果有没有什么不同?

用户点击退出时执行批处理代码

我正在做一些代码testing,而我偶然发现了一个我找不到或修复的问题。 我的问题是: 如果用户不小心closures了cmd窗口,我想在实际closures之前执行一个批处理代码。 例如: 我运行脚本A.bat。 当用户想要退出时,我想让它删除我的B.bat,然后closures窗口。 代码如下所示: @ECHO OFF echo Welcome to A.bat del B.bat (when user exits the window) 我在谷歌和论坛上找不到它,所以我想也许你们可以帮我一把。 在此先感谢,尼尔斯