Articles of 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 […]

batch file,stringvariables比较,if语句

我想比较一个文件的日志与一个普通的string,但它不进入如果比较。 我在echo声明中获得“连接失败”作为第二个标记,但没有得到任何IF语句的结果。 @echo off rem start cmd.exe for /f "tokens=2 delims=:" %%n IN (C:\Users\rohit.bagjani\Desktop\result\telnetresult.txt) DO ( SET str1 = " Connect failed" echo %%n if \i %str1%==%%n echo "true" ) echo. pause

在批处理脚本中抑制SQL * PLUS错误

我有一个脚本db.bat如下: @echo off setlocal enabledelayedexpansion for /F "tokens=*" %%A in (user.txt) do ( sqlplus -s %%A @fetch.sql >> output.txt ) 其中user.txt (我需要过期date的所有用户详细信息的列表,这个列表可能有大约40-50行)是: dbuser/password@database1 readuser/p@ssw0rd@database1 adminuser/Pa$$word@database2 ……. ……. ……. 和fetch.sql是: set pagesize 20 set linesize 200 select username, expiry_date from user_users; exit; 我在这里面临的问题是,当我的脚本db.bat遇到任何SQL错误,如下所示,它不会进一步移动,并在这一点上被绞死,直到我手动停止。 SQL错误 : ERROR: ORA-12154: TNS:could not resolve the connect identifier specified ERROR: ORA-28000: […]

Windows批处理脚本parsingCSV文件并输出文本文件

我已经看到另一个页面上的响应( 帮助写一个批处理脚本来parsingCSV文件并输出一个文本文件 ) – 辉煌的代码BTW: @ECHO OFF IF "%~1"=="" GOTO :EOF SET "filename=%~1" SET fcount=0 SET linenum=0 FOR /F "usebackq tokens=1-10 delims=," %%a IN ("%filename%") DO ^ CALL :process "%%a" "%%b" "%%c" "%%d" "%%e" "%%f" "%%g" "%%h" "%%i" "%%j" GOTO :EOF :trim SET "tmp=%~1" :trimlead IF NOT "%tmp:~0,1%"==" " GOTO :EOF SET "tmp=%tmp:~1%" GOTO trimlead […]

如何扩展一个CMD shellvariables两次(recursion)

使用Windows XP CMD命令行我可以扩展一个variables两次,如下所示: set AAA=BBB set BBB=CCC for /F "usebackq tokens=*" %i in (`echo %%AAA%%`) do echo %i 会回应CCC 。 即AAA已扩展到stringBBB ,然后variablesBBB已扩展到CCC 。 这从批处理脚本(即.cmd文件)不起作用。 将%%AAA%%更改为%%%AAA%%%或%%%%AAA%%%%也不起作用。 任何想法如何我可以从一个脚本内实现这一点,即将可变AAA扩展到stringCCC? 晚编辑 答案张贴工作为我的简单例子,但非曲折的答案不起作用的真实情况。 这是一个扩展的例子(不起作用),它说明了我实际上正在做的事情: setlocal enabledelayedexpansion set LIST=BBB CCC DDD set BBB=111 set CCC=222 set DDD=333 for %%i in (%LIST%) do ( for /F %%a in ('echo %%%i%') do echo […]