在Windows批处理文件中编写脚本时,有时脚本的正确执行需要使用setlocal命令。我对使用setlocal的主要提示是,我经常执行复杂的for&if语句,在这些语句中我在该代码部分设置了变量值。当我发出命令endlocal时,这些设置丢失了。到目前为止,我已经解决了这个问题,方法是将变量值回显到setlocal段中的临时文件中,然后在endlocal之后将值读回变量中.然而,似乎应该有一个更优雅的解决方案来解决这个问题。如果仅使用一个或多个set语句,建议的答案提供了一种规避问题的简便方法。但是,当setlocal到位以允许for循环在执行时而不是解析时正确扩展变量名时,链接的答
创建一个包含以下内容的批处理文件:@echooffsetlocalecho%1if[%1]==[]echohi然后像这样从命令提示符运行它:script.cmd==输出结果如下:ECHOisoff.hi这是为什么,它是如何发生的?另外,如何更可靠地检查批处理脚本中的空字符串?谢谢。 最佳答案 在这种情况下,我建议使用以下内容:@echooffsetlocalecho(%~1if"%~1"==""echohi而不是script.cmd==使用script.cmd"=="请注意,我使用了echo(,如果变量被视为空,它将回显一个换行符,
当我在cmd提示符下运行以下命令时,它起作用了:for/R%fin(*.shp)doogr2ogr-nlnmerge-update-appendmerge.shp%f但是当我从.bat文件运行它时它不起作用。说-nln是出乎意料的。无论如何我可以从.bat文件运行它。 最佳答案 %字符对于命令行参数和FOR参数有特殊意义。要将百分比视为常规字符,将其加倍:%%当你从批处理文件中执行它时,你应该这样写:@echoonfor/R%%fin(*.shp)doogr2ogr-nlnmerge-update-appendmerge.shp%%
我有一个曾经可以工作的Windows批处理文件,但自从我更换了笔记本电脑后,它就失败了。我猜这是由我的文件路径中的点(.)引起的,但我一直无法找到解决此问题的方法。我基本上将一个文件名传递给我的批处理文件并让它处理它,但是当它开始从文件中读取行时它失败了:echoMBPFile:%1remCheckthatthefileisaMapBasicProjectFileif/I"%~sx1"NEQ".mbp"(echoError:file%~dpnx1isnotaMapBasicProjectFile^(^*.mbp^)goto:EOF)else(echofile%1isaMapBasicP
我有一个每10分钟更新一次.txt文件的应用程序。每天一次,文件在0900(上午9点)之后第一次更新,我想发送该文件的电子邮件。更新后的文件(由第3行的SET命令指向)的时间戳可以是0900到0910之间的任何时间。我打算做的是每天在0857运行一个批处理文件,运行15分钟检查文件的日期戳,直到时间变为09,然后它发送电子邮件并完成。在下面用于测试函数的代码摘录中,我遇到了简单比较语句的问题:IF!hour!EQU"09"(GOTO:rundailymail)ELSE(Timeout/T6).尽管(根据我运行它时的回显),小时是“09”,但比较返回false。要测试它,您需要一个时
我想创建一个批处理文件,删除或删除文件夹C:\temp\root\students\type1、其子文件夹和所有文件。我有的文件夹和文件如下:C:\tempC:\temp\rootC:\temp\root\studentsC:\temp\root\tutorsC:\temp\root\students\type1C:\temp\root\students\type2C:\temp\root\tutors\type1C:\temp\root\tutors\type2C:\temp\root\students\type1\details.txtC:\temp\root\students\t
我忠实的路径遍历方法不再有效——它将空格视为分隔符。好久没做批处理编程了。使用FOR循环时,唯一允许使用分隔符的是FOR/F选项。我不想创建一个包含路径的临时文件,希望做如下的事情:C:\Users>for/f"delims=;"%iin%path%doecho%iC:\Programwasunexpectedatthistime.C:\Users>for/f"delims=;"%iin(%path%)doecho%i\Commonwasunexpectedatthistime.C:\Users>for/f"delims=;"%iin'foo;bar'doecho%i'foowasun
在cmd.exe窗口中有一个名为“滚动模式”的状态。在thissite有关于如何激活它的描述;通过键盘:Alt-Space,然后是Edit,然后是scroLl;或通过鼠标:右键单击标题栏,然后选择编辑和滚动。我的问题很简单:什么Win-32API函数用于激活此状态?我查看了SetConsoleMode功能,但它不管理此模式(也不管理consolefunctions的其余部分)。我在网上搜索“cmd.exe滚动模式”,但多个结果中没有一个是指this模式... 最佳答案 经过一些挖掘和测试,“似乎”这种行为并未被任何公共(public
我开始在安装了cygwin(Python2.7)的Windows7x64机器上开发一个小的pdf到jpg脚本。以下完美运行:importsubprocessfilename="test"subprocess.check_output('gs-sDEVICE=jpeg-dPDFFitPage-g2800x3620-o'+filename+'-2800-%03d.jpg'+filename+'.pdf',stderr=subprocess.STDOUT)在我的Windows10x64非Cygwin机器(Python2.7)上拉取此项目后,此代码出错,因为它不再将“gs”识别为ghostsc
我正在使用“执行Windows批处理命令”选项在Jenkins中运行一堆Windows命令作为构建步骤。但是,构建在执行一些命令后停止,忽略其余命令,并显示“完成:成功”。这是我的“执行Windows批处理命令”的样子:xcopysource\dirdest\dir7zxfile_name.zipcdextracted_dir_namermdir/s/qstale_outputcommand_to_be_runanother_command_to_be_runpost_processing_copy_and_zip_commands_Jenkins一直执行到another_comman