Articles of batch file

Windows批处理脚本 – 提取可变数量的参数

在Windows批处理脚本中,我想传递可变数量的参数,然后使用这些参数中的第一个n-1构build一个新variables,并将第n个参数作为另一个variables 所以如果我inputscript.cmd arg1 arg2 arg3 arg4 ,我希望能够做到 set newvariable1="arg1 arg2 arg3" set newvariable2="arg4" 如果我inputscript.cmd arg1 arg2 arg3 arg4 arg5 arg6 set newvariable1="arg1 arg2 arg3 arg4 arg5" set newvariable2="arg6" 参数是字母数字string

如何使用FOR循环分配超过26个variables?

如果我有35个字符需要分配标记,我需要使用小写和大写。 我如何处理大写的ASCII字符,如果我已经使用所有的小写字母? 我已经到了小写字母26,但是当我添加三个大写字母ASCII的输出A | B | C | …让我解释一下。 这是代码: @ECHO OFF SETLOCAL SET "sourcedir=C:\Users\aborgetti\Desktop\Pipe Delimiter Project" SET "destdir=C:\Users\aborgetti\Desktop\Pipe Delimiter Project" ( FOR /f "tokens=1-29delims=|" %%a IN ('TYPE "%sourcedir%\test.txt"') DO ( ECHO(^|%%a^|%%b^|%%c^|%%d^|%%e^|%%f^|%%g^|%%h^|%%i^|%%j^|%%k^|%%l^|%%m^|%%n^|%%o^|%%p^|%%q^|%%r^|%%s^|%%t^|%%u^|%%v^|%%w^|%%x^|%%y^|%%z^|%%A^|%%B^|%%C^| ) )>"%destdir%\newfile.txt" 最后三个%% A ^ | %% B ^ | %% C ^ | 将不会转换为我分配给他们的项目。 任何人知道为什么 我能做些什么来获得超过26个代币? UPDATE 这里是我在哪里我知道我有一些语法,但我认为一般在那里。 任何帮助? @ECHO OFF SETLOCAL […]

如何只知道.exe文件的名称在cmd中停止服务?

我需要在不知道服务名称的情况下停止batch file中的Windows服务。 我唯一知道的是运行的文件被称为SomeServer.exe,但SC命令需要服务的实际名称。 目前我必须扫描一个configuration文件,并执行丑陋的string操作,但我希望有一个更聪明的方法。 有什么build议么?

从cmd.exe或Windows Run运行命令之间的区别

实际上我试图运行一个应用程序作为另一个用户,虽然它在cmd.exe提示符下工作得非常好,但如果我使用Windows运行提示符(它实际上取决于我正在尝试的应用程序跑步)。 例如,从cmd.exe或W-Run提示符(使用Windows XP或Windows 7)都可以正常工作: runas /user:ME regedit.exe 虽然这只能在cmd.exe提示符下工作(它在两种情况下都要求input密码,但是如果从WinXP或W7上的W-Run启动,它不会执行任何操作): runas /user:ME services.msc 它实际上是一种不一致,与CMD它总是工作,但与Windows运行,这是真的不可靠和随机。 任何想法都有这样的区别? 为了解决这个问题,我实际上是使用batch file作为另一个用户启动应用程序,然后在Windows运行提示符中inputbatch file的完整path。 它确实确保可靠性,但我仍然想知道如果我做错了什么。 cmd /k "runas /user:ME ""regedit.exe"" && exit"

如何find当前batch file的名称和存储为variables?

我有一个batch file。 什么是命令/如何find当前正在运行的batch file的名称并将其存储为variables? 例如: 我batch filehello.bat正在运行,我如何将名称(hello.bat)作为variables存储。

批处理脚本来设置java homepath /path – 只添加到path,如果尚未包含

我已经提交了一个脚本来设置java homepath /path用于在不同版本的Java之间切换。 我只想要设置path,如果它不包含位置string到java的bin文件夹。 现在,如果我多次运行脚本,它会多次添加到path中。 我怎样才能实现这个? 码 @echo off echo Setting JAVA_HOME setx -m JAVA_HOME "C:\Program Files\Java\jdk1.8.0" echo JAVA_HOME: %JAVA_HOME% echo setting PATH setx -m PATH "%Path%;%JAVA_HOME%\bin" echo PATH: %PATH% echo Display java version java -version pause 我可以使用,如果条件不知何故? 谢谢… 编辑:如果我已经设置java_homepath和path到Java 7 jdk,并在脚本中将其设置为java jdk 8它设置java_homepath但设置path时,它使用旧的java homepath,所以我需要运行脚本两次。 为什么是这样以及如何解决这个问题? EDIT2: @echo off echo Setting JAVA_HOME setx -m JAVA_HOME […]

当一个ant文件调用一个调用ant文件的batch file时如何失败

这是我想要做的。 我有一个调用.batch文件的ant文件,它调用一个ant文件来构build一个组件。 如果组件构build失败,我希望主ant文件无法构build。 主要的ant文件 <target name="TestingThree"> <exec executable="${basedir}\..\..\Component\UnitTests.bat" dir="${basedir}\..\..\Component"> <arg line='run'/> </exec> </target> batch file if "%1" == "run" call ant -buildfile build.xml test 构build组件ant文件 <target name="test" depends="compile.test, -injectSigningKeys" description="Run Component tests"> <junit haltonfailure="yes" printsummary="yes" showoutput="yes"> <test name="Component.TestSuite" todir="${report}" filtertrace="on" /> <formatter type="xml" usefile="true" /> <classpath refid="test.classpath" /> </junit> </target> 目前,每当我执行主要的ant文件时,.batch文件将被调用,另一个ant文件将被调用,失败的构build。 但主要的antbuild设仍然成功。 有.batch文件的方式返回失败/成功的主要ant文件? 我不能直接从主ant文件中调用第二个ant文件。 我也不能将代码从第二个ant文件传输到主要的ant文件。

通过命令行添加一个系统path环境variables?

我试图通过命令行添加一个variables到系统path,但无法find“系统path”variables 如果我运行下面的代码: setx path "%path%;C:\Python27\;C:\Python27\Scripts\" 它将它添加到本地path,而不是系统path,所以我尝试了这样的事情: setx syspath "%syspath%;C:\Python27\;C:\Python27\Scripts\" setx systempath "%systempath%;C:\Python27\;C:\Python27\Scripts\" 除了编辑本地pathvariables的能力之外,我找不到任何位于http://technet.microsoft.com/en-us/library/cc755104.aspx的东西。 我不想通过GUI来做到这一点,我正在寻找一种方法来做到这一点(希望命令行) 在Autoit例如我可以通过registry编辑它: $SystemPath = RegRead("HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment", "Path") If StringRight($SystemPath, 1) = ";" Then RegWrite("HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment", "Path", "REG_SZ", $SystemPath & "C:\Python27\;C:\Python27\Scripts\") Else RegWrite("HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment", "Path", "REG_SZ", $SystemPath & ";C:\Python27\;C:\Python27\Scripts\") EndIf 或通过GUI Run("SystemPropertiesAdvanced.exe") WinWait("System Properties") ControlClick("System Properties", "Enviro&nment Variables…", "[CLASS:Button; INSTANCE:7]") WinWait("Environment Variables") ControlListView("Environment […]

如何在安装程序以pipe理员权限运行后在非pipe理员窗口中打开应用程序

背景:安装我们的应用程序需要pipe理员权限。 安装程序完成后,我们从安装程序调用新安装的程序,并在pipe理员窗口中打开。 (这至less是它在Windows上的工作原理)然后当我们点击图标来运行程序时,它会打开另一个窗口(因此应用程序的两个实例正在运行 – 这不是一件好事)。 是否可以从batch file运行安装程序和应用程序,以便只有在安装程序closures后,应用程序才会在非pipe理员窗口中打开? (在我们的应用程序安装程序要求pipe理员权限,所以batch file不应该这样做。) 我尝试使用“Everything.exe”(一个需要pipe理员权限的优秀应用程序)进行实验。 REM Test batchfile for opening two apps "C:\Program Files (x86)\Everything\Everything.exe" Notepad.exe 不幸的是,只要pipe理员权限授予“Everything.exe”,所有事情都会在pipe理员窗口中加载,记事本将加载到非pipe理员窗口中。 安装程序退出后,是否可以在非pipe理员窗口中打开应用程序?

/ ChainingPackage做什么?

我正在远程PC上安装.NET Framework 4.5,以便从CMD升级PowerShell 4。 "%PathToInstaller%\NDP451-KB2858728-x86-x64-AllOS-ENU.exe" /q /norestart /log %log%\.net4.5installLog.htm 我看到一些人用/ChainingPackage开关这样做,只是想知道这是什么? 因为我没有看到/?这个选项/?