Articles of batch file

使用EnableDelayedExpansion时,修改variables的语法是正确的

我希望能够做%〜p只能看到文件的path。 但是我不能得到正确的语法在循环中使用它(使用EnableDelayedExpansion) 这是我的代码: @echo off set "dir1=%TMP%\opt" set "dir2=c:\opt" set "empty=" setlocal EnableDelayedExpansion for /f %%F in ('dir /a:-d /s /b /r "%dir1%"') do ( set "file_path=%%F" set "file_name=%%~nF" set "new_path=!file_path:%dir1%=%dir2%!" set "new_path=!new_path:!file_name!=%empty%" //This command is problematic echo !new_path! ) endlocal 任何方式对我来说呢?

mercurial windowsbatch file,用于将更改提供给多个存储库

我是一个在Windows上的mercurial用户,我正在尝试编写一个batch file来检查存储在一个公共文件夹(即可能有一个主文件夹下有10个左右的小型储存库)的许多存储库的传入更改。 我有以下batch file,成功迭代通过多个存储库,并运行hg传入。 然而,我似乎无法得到它执行hg -pull -u当一个存储库被发现有远程更改。 FOR /D /r %%G in (".hg*") DO ( @echo Processing: %%G cd /d %%G\.. hg incoming IF NOT ERRORLEVEL 0 ( echo Pulling changes from the server hg pull -u ) cd.. ) 我很确定问题在于If语句。 hg传入似乎没有一个可以被ERRORLEVEL解释的返回值。 这是正确的方法,或者我应该使用Python而不是?

如何使用COPY命令追加到文件

我正在运行Windows 7旗舰版x64,但我的经验可以追溯到DOS 3.0。 由于和DOS 3.1一样,您可以使用COPY命令将文件追加到另一个文件: COPY FILE1+FILE2=FILE1 需要一个临时的FILE3是不必要的。 这是一个非常方便的命令,因为每当你添加一个新的程序,你经常需要更新你的CONFIG.SYS和AUTOEXEC.BAT文件。 它也曾经是获得正确的订单是重要的,否则你会最终得到一个空的FILE1。 但是今天当我尝试的时候,它没有改变FILE1 ,当我把这个顺序颠倒过来时,它(可以理解)使FILE1成为FILE2一个副本。 有没有人知道是否已经被另一种方法取代,当这种变化发生? 编辑: 我已经做了更多的testing,奇怪的是,即使上面的代码不起作用,你仍然可以从控制台进行复制,并将其追加到现有的文件中,如下所示: copy file1+con=file1 Type some text to append to file1 ^Z ([CTRL]+Z the End Of File character) 我想知道如果我的Windows版本搞乱了。 任何机构都可以复制我的发现吗? 编辑: 它适用于95/98 / ME / 2000 / XP / XP Mode / 7 Professional x64 / 8 x64。 所以我想象它不是一个7 Ultimate x64问题,而是我的机器问题。 *叹息* […]

从Windows中删除我的文件名中的最后一个字符

林相当新的批处理编程,我想删除我的文件名的最后一个字符。 10_myfile_12345_6789.txt 11_myfile_12345_0987.txt 我想删除我的文件名的最后4位数字我怎么能做到这一点? 我已经试过了 @echo off setlocal enabledelayedexpansion set X=3 set FOLDER_PATH= pushd %FOLDER_PATH% for %%f in (*) do if %%f neq %~nx0 ( set "filename=%%~nf" ren "%%f" "!filename!%%~xf" ) popd PAUSE 但它删除了第一个和最后一个字符,我只在这里看到这一点,即时通讯仍然很困惑,这是如何工作的

从文本文件中提取find的行+后续行

我试图写一个batch file,扫描几个文件,并寻找string“ WARNING ”。 到目前为止我有: FORFILES -m*.f08 -C"CMD /C FINDSTR /N "WARNING" ECHO @FILE >> ListOfWARNINGS 问题一:它不会在新行中打印每个find的string。 问题二:如何更改代码并添加一条IF语句,以便在WARNING被发现的行后面打印行。

自我从Windowsbatch file中删除jar

我有一个Java应用程序,应该通过在线下载新版本来自我更新,然后它应该自我删除,我已经pipe理了更新,现在我需要删除旧的jar文件。 由于我的应用程序将只在Windows上运行,所以我可以使用bat文件,所以我编写了用于创build应该closuresJVM的batch file的代码(这样jar文件就不会被locking),那么应该删除jar文件,然后它应该删除bat文件(bat文件应该能够自我删除)。 代码是这样的: String pat = new File("delete.bat").getAbsolutePath(); FileWriter fw = new FileWriter(pat); PrintWriter pw = new PrintWriter(fw); pw.println("taskkill /F /IM \"java.exe\""); pw.println("DEL /F \""+ jarname +"\""); pw.println("DEL /F \"delete.bat\""); pw.close(); System.out.println("cmd /c START \"\" \"" + pat + "\""); Runtime.getRuntime().exec("cmd /c START \"\" \"" + pat + "\""); 这实际上工作不坏,它删除了jar和蝙蝠,但是…删除后仍然是命令提示符打开,这真的很难看:/我甚至试过在DEL / F“delete.bat”后退出,但由于蝙蝠已被删除,无法读取退出命令…关于如何使提示closures一些想法?

这是在Windows批处理的错误?

我发现批处理脚本的一个奇怪的问题,我似乎无法解释。 也许只是因为我不太了解批处理工作的基础,但是这里是一个例子batch file(test.bat): @echo off FOR /F "tokens=1*" %%i in ("%*") DO ( echo %%j ) 如果我这样称呼它: test.bat ab a,b "a,b" 我得到这个作为我的输出: a,b "ab" 为什么第二个逗号被剥离? 如果我像这样逃避逗号: test.bat ab a,b "a^,b" 我得到正确的输出: a,b "a,b" 这几乎就像','被for循环认为是一个分隔符,但是当我看着FOR /?时,唯一的默认delim就是空白。 逗号不被列为分隔符。 如果我明确指出delim是一个空格,我仍然会得到这个行为。 如果我逃避报价,我仍然得到这种行为。 不pipe怎样,如果逗号是分号,那么第一个逗号也应该被剥离出来吗? 奇怪的是,如果你尝试在for循环中使用'usebackq',你会得到相反的结果。 第一个逗号被删除,第二个被保留: ab "a,b" 为什么我必须在引号内跳过所有逗号才能工作? 是否有一些whindows规则我失踪或者它只是在Windows批处理脚本错误?

在文件名中用空格和点重命名文件

我正在制作一个简单的* bat文件,用于replace空格()和下划线(_)的点(。)。 我认为这应该工作,但它不: @ECHO OFF setlocal enabledelayedexpansion FOR %%f IN (%*) DO ( set filename=%%~nj set filename=!filename:.=_! set filename=!filename: =_! if not "!filename!"=="%%~nf" RENAME "%%f" "!filename!%%~xf" ) 你知道发生了什么事吗?

当服务已经在使用Windows批处理脚本运行时,Windows服务无法启动

我正在写一个Windows批处理脚本,将安装服务。 如果它已经运行,那么我正在停止并删除服务,然后再次安装服务。 我正面临一个奇特的行为。 当服务已经运行,并且当我正在运行下面的batch file时,该服务再次被安装,但它无法启动。 当我重新启动系统,并启动服务,它开始。 如何解决此启动服务问题,而无需重新启动计算机。 我还join了taskkill / f / PID来杀死进程libertyserver.exe。 这是我的代码:test.bat。 我从命令行运行test.bat。 test.bat的: @echo off setlocal @echo off set JAVA_SERVICE_EXE=libertyserver.exe … …. set SERVICE_DISPLAY_NAME="%LIBERTY_SERVICE_NAME%" set SERVICE_DESCRIPTION="%LIBERTY_SERVICE_NAME%" echo Stopping and Deleting existing services for /F "tokens=3 delims=: " %%H in ('sc query %SERVICE_NAME% ^| findstr "STATE" ') do ( if /I "%%H" EQU "RUNNING" […]

cordova:不能在Windows 8上添加Android平台

我已经在linux中开发android应用程序,并想尝试在其他平台上开发它像Windows一样。 我已经安装了所有必要的文件(node.js,适用于windows,cordova,phonegap的ADT软件包),并且全部运行。 我可以通过Windows命令行创build一个项目。 我做的一个示例项目是:cordova create hello com.example.hello HelloWorld。 该项目已成功创build。 然后,到项目的目的地添加android平台的命令:cordova -d platform add android。 错误然后说, 'C:\Users\My' is not recognized as an internal or external command, operable program or batch file. Command finished with error code 1: C:\Users\My user\.cordova\lib\android\cordova\3.4.0\bin\create.bat –cli,C:\Users\My user\Documents\Android Development\Workspace\hello\platforms\android,com.example.hello,HelloWorld Error: C:\Users\My user\.cordova\lib\android\cordova\3.4.0\bin\create.bat: Command failed with exit code 1 Command failed with exit code […]