Articles of batch file

如何在batch file中使用嵌套的FOR循环

我有一些代码,我想用FOR循环来处理一组文件。 作为处理文件的一部分,有一个FOR /F循环来读取它,并根据文件名将数据追加到另一个文件中。 为了能够设置输出文件名我有延迟variables扩展设置。 这是代码应该看起来像我原本打算的那样: setlocal enabledelayedexpansion for %%f in (DataFolder\*.Ext) do ( set POI=%%~f set POI=!JbPOI:DataFolder\=! set POI=!JbPOI:.Ext=! for /f "tokens=1,2,3 delims=," %%a in ("%%~f") do ( set CX=%%a set CY=%%b set FN=%%c echo !FN!,9,!CX!,!CY! >> "DataFolder\!POI!.tmp" ) ) endlocal 此代码不起作用,因为variables%%a , %%b和%%c永远不会收到一个值, %%a始终与%%f具有相同的值。 我已经阅读了一些有关这个问题的文章,但不能从他们的工作中提取解决scheme。 我已经尝试了几件事,迄今为止没有工作… 添加一个虚拟的外部循环来显式地创buildvariables%%a到%%j 内部FOR循环取出,并使其成为一个子程序 内部FOR循环取出,并使其成为一个单独的batch file 任何人都可以告诉我,这可以 – 或必须 – […]

在Windows批处理中查找打开的进程

我试图编写循环的代码,并告诉某个进程是否被打开。 它应该是一个循环,如果过程被打开,它会实时显示我。 换句话说,程序打开时文本会改变,closures时会再次改变。 相反,我得到的是一个文本相同的洪水,它不显示下面的“回声”。 我试过这个: @echo off goto xera :start tasklist /FI "IMAGENAME eq notepad.exe" | find /I "notepad.exe" > nul IF %ERRORLEVEL% equ 0 ECHO is opened IF %ERRORLEVEL% equ 1 ECHO isnt opened :xera set /p "=Status: " <nul &call :start //the code got 'stuck' here ECHO Text 2 (doesnt show) pause>nul

如何使Windowsbatch file暂停时双击?

我写了一个batch file来自动化一些任务。 我可以从命令窗口运行它并运行并显示结果。 如果我从资源pipe理器中双击它,它会立即运行并终止,所以我看不到结果。 有没有办法让batch file窗口保持打开状态,直到我通过双击图标启动它为止。 当我从命令行调用一个batch file时,我不想传递一个/ nopause参数。 我想要一个解决scheme,我可以使用batch file,而不必做任何特别的事情? 谢谢。 注意我不希望它从命令行运行时暂停! 我可以从另一个batch file中调用这个batch file来执行一个操作。 在这种情况下,我不能坐在那里继续打进。 理想情况下,如果我可以在batch file中放入一些代码,那么最好的办法是找出它的起始位置,然后暂停或不适当。

batch file:相对path错误,从当前目录向上一级

我是批处理脚本编程的新手。如果给出相对path,执行batch file时出现错误。 我有以下文件夹结构 Script folder – C:\batch\script\ServiceRegister.bat Bin path – C:\batch\bin\ERecruitGenerateReportsWindowsService.exe ServiceRegister.batbatch file – %windir%\Microsoft.NET\Framework\v4.0.30319\InstallUtil.exe %~dp0%~1\bin\ERecruitGenerateReportsWindowsService.exe 当我执行ServiceRegister.bat文件时,我得到了错误: Exception occurred while initializing the installation: System.IO.FileNotFoundException: Could not load file or assembly 'file:///C:\batch\script\bin\ERecruitGenerateReportsWindowsService.exe' or one of its dependencies. The system cannot find the file specified. 我正在使用“%〜dp0%〜1”在目录中上一级,仍然获得当前path。 %~dp0%~1 – C:\batch\script\ 我需要C:\批处理\path。 我怎么能得到这条路? 它工作正常如果我给绝对path – %windir%\Microsoft.NET\Framework\v4.0.30319\InstallUtil.exe C:\batch\bin\ERecruitGenerateReportsWindowsService.exe

如何在Windowspath中使用卷标?

我想使用batch file从可移动驱动器复制文件,而不pipe其获取的驱动器号。 到目前为止,没有去。 似乎没有任何现成的命令或第三方命令行工具可以处理基于卷标的path。 我尝试了FreeFileSync,但它大批量工作,我需要在这里精确的文件操作。 此外,它不会删除,我需要移动文件从pendrive。 然而,我感兴趣的是发出一个无意义的命令,如… C:\> cd MYPENDRIVE: …在默认的错误信息中产生了相当有趣的一点: The filename, directory name, or volume label syntax is incorrect. ^^^^^^^^^^^^^^^^^^^ 如果这个消息是可信的,那么这意味着在那里放置一个卷标是一些正确的语法。 或者不在? 注意:如果需要的话,我可以写一个小的“getdriveletterforvolume”工具,但我宁愿不要重新发明轮子。 此外,在更长的batch file操作过程中,驱动器可能会被移除并replace为另一个驱动器,此时我需要停止操作,而不能在另一个驱动器上继续使用相同的驱动器号。 注2:使用\\?\ Volume {12345678 …..}是最后的手段,虽然它可以在一定程度上驯服,build立一个基本的batch file,如… SET PENDRIVE=\\?\Volume{949a764e-a2f0-11e3-b710-6cf04975450b} SET BACKUPDRIVE=\\?\Volume{e79091c4-5c2a-11e3-86f9-806e6f6e6963} if exist %PENDRIVE% { if exist %BACKUPDRIVE% { move %PENDRIVE%\*.* %BACKUPDRIVE% } } …但它很丑,不会让我做任何魔术,就像给两个pendrives同一个标签,让他们的行为相同。 我知道这不是一个普遍的情况,但是,嘿,为什么要限制一个select,哪里可以有一个现成的解决scheme呢? 编辑:进度。 我修改了子程序来返回一个值作为VOLUMEID: CALL :GetVolumeID […]

IF中的转义字符

我尝试了不同的变种(如setlocal EnableDelayedExpansion) – 但没有任何工作: echo off IF "%1"=="Debug^|Win32" set servicesConfig=Win2008.Debug echo Incorrect parametr %servicesConfig% pause > nul

如何避免批行限制(每行8191个字符)?

我有一个多行文件(大约300 – 400行)每行有72个字符,我需要转换成一个单一的行。 有任何想法吗 ?

将命令输出放入一个variables中

给定一个包含以下文件的目录 image1.txt image2.txt image3.txt 我想得到最旧的文件(让文件按数据sorting,先设定date): dir /b /od c:\test\image?.txt | findstr ^1 手动将其input到cmd.exe时效果很好。 现在(在批处理脚本中)我想把这个命令的输出放在一个variables中。 我怎样才能做到这一点? 谢谢! 更新:想知道如果没有一个循环直接的方式吗?

如何做批处理while循环

早上好,下面是我正在批量处理的代码。 其中一个要求是在代码中有一个while循环。 但是,这个过程在课堂上没有向我们解释。 我还包括了该计划的指示。 不知道如何写这个逻辑。 希望你们可以帮忙。 感谢您的时间。 在命令提示符下使用Windows批处理。 – 通过使用if和while()命令来执行除法,除错误陷阱, 怎么样: – 将您的姓名,当前date和时间附加到名为results.txt的新文件 – 使用一个while循环。 – 如果用户为第一个或第二个数字input值55,则必须终止该除数为0的实现。 – 要求用户input第一个号码并检查其值。 – 要求用户input第二个号码。 – 如果第二个号码是零,通知用户并要求一个正确的第二个号码。 – 如果第二个数字不是零,则执行除法,使用标签在计算中显示所有数字,并将它们添加到results.txt文件中。 @ echo off setlocal enabledelayedexpansion echo results.txt echo Roberto Martinez >> results.txt set dt=%date:~7,2%-%date:~4,2%-%date:~10,4%_%time:~0,2%_%time:~3,2%_%time:~6,2% echo %dt% >> results.txt goto :main :main setlocal set /p choice1="Enter your first number" set /p […]

用BAT编辑XML

我试图通过BAT修改XML文件(实际上只是一个属性的值, 版本 )。 以下是我的XML文件的简短示例: <?xml version="1.0" encoding="utf-8"?> <APPS> <APP Version="Some.Value"> <!– APP icon. –> <Icon>C:\Program Files (x86)\Somewhere</Icon> <Url>http://www.somewhere.com</Url> </APP> </APPS> 以下是一个BAT文件: @ECHO off SETLOCAL DISABLEDELAYEDEXPANSION SET anotherVariable=New.Value (FOR /F "usebackq delims=" %%a IN (Sample.xml) DO ( SET "line=%%a" SETLOCAL ENABLEDELAYEDEXPANSION SET "newLine=!line: <APP =!" IF "!newLine!" neq "!line!" ( SET "newLine= <APP Version="%anotherVariable%">" ECHO.!newLine! ENDLOCAL […]