首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Windows批处理中的脚本编写

Windows批处理中的脚本编写
EN

Stack Overflow用户
提问于 2012-08-15 14:47:37
回答 1查看 171关注 0票数 0

我有一个非常简单的批处理文件,基本上是检查是否设置了环境变量,然后尝试设置它。它没有正确地设置变量,而且我对批处理文件非常陌生,所以我对我正在编写的脚本有一些一般性的问题。任何洞察力都将不胜感激。这是我的问题。

  1. 在第15行中,如果我不知道目录的全名怎么办?也就是说,如果我只知道‘汽笛’是它的一部分,并想检查它是否是== to DIR呢?
  2. 在第16行和第19行中,我试图说明如果我处于‘哨声-1.0.0’中,我知道应该将BELFRAMEWORK_HOME变量设置为它上面的1目录。我试着用‘%DIR%.\’来做这件事,但是这似乎没有效果。如何将BELFRAMEWORK_HOME设置为‘哨声-1.0.0’上方的一个目录?
  3. 在第17和第20行中,没有打印BELFRAMEWORK_HOME变量。我不明白为什么,因为它的形式与第10行和第12行相同,第10行和第12行与预期的相同。为什么BELFRAMEWORK_HOME不回波?
  4. 最后一件事,有什么好的在线资源来学习更多关于这种类型的脚本吗?

谢谢!

代码语言:javascript
复制
1@echo off
2
3if not defined JAVA_OPTS (
4    set JAVA_OPTS=-Xmx1024m -Dderby.stream.error.field=org.openbel.framework.common.enums.DatabaseType.NULL_OUTPUT_STREAM
5) else (
6    set JAVA_OPTS=%JAVA_OPTS% -Dderby.stream.error.field=org.openbel.framework.common.enums.DatabaseType.NULL_OUTPUT_STREAM
7)
8
9set DIR=%CD%
10echo "DIR/CD : %DIR%"
11set DIR=%~dp0
12echo "DIR/~dp0 : %DIR%"
13
14if not defined BELFRAMEWORK_HOME (
15  if "%DIR%"=="whistle-1.0.0" (
16      set BELFRAMEWORK_HOME=%DIR%\..\
17      echo "DIR == whistle, BELFRAMEWORK_HOME is now: %BELFRAMEWORK_HOME%"
18  ) else (
19      set BELFRAMEWORK_HOME=%DIR%\..\
20      echo "DIR != whistle, BELFRAMEWORK_HOME is now: %BELFRAMEWORK_HOME%"
21    )
22)
23
24set WHISTLE_HOME=%~dp0
25java %JAVA_OPTS% -jar %WHISTLE_HOME%\whistle-1.0.0.jar %*
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-08-15 17:28:47

哦,四个问题,一个的价格:-)

1) --我相信你想要像C:\folder\xxxxWHISTLExxxx\这样的东西,而不是C:\xxxxWHISTLExxxx\folder\那样的东西。如果是这样的话,那么您将希望使用FINDSTR和一个正则表达式来确保最后一个目录是匹配的哨子。搜索必须不区分大小写。

您不希望FINDSTR输出。你只想知道字符串是否被找到。如果未找到(错误),则返回1;如果找到,则返回0(成功)。

代码语言:javascript
复制
echo %DIR% | findstr /irc:"whistle[^\\]*[\\]*$" >nul && (
  rem Code for success (string found)
)
  rem Code for failure (string not found)
)

2)如果您想要尾随反斜杠,则可以使用

代码语言:javascript
复制
for %%A in ("%DIR%\.") do set "BELFRAMEWORK_HOME=%%~dpA"

如果不想使用尾随反斜杠,请使用

代码语言:javascript
复制
for %%A in ("%DIR%\..") do set "BELFRAMEWORK_HOME=%%~fA"

3)对于新批处理用户来说,是一个典型的绊脚石。在分析行时展开%BELFRAMEWORK_HOME%,并将整个IF语句(包括括号大小的代码块)解析为一条语句。因此,扩展值是在执行IF语句之前存在的值。

你可以通过延迟扩展来解决这个问题。

代码语言:javascript
复制
@echo off
setlocal enableDelayedExpansion
set var=BEFORE
(
   set var=AFTER
   echo within block normal expansion = %var%
   echo within block delayed expansion = !var!
)
echo after block normal expansion = %var%

以上结果如下:

代码语言:javascript
复制
within block normal expansion = BEFORE
within block delayed expansion = AFTER
after block normal expansion = AFTER

4)这里是我最喜欢的批处理脚本网站

  • http://dostips.com
  • http://judago.webs.com
  • http://robvanderwoude.com/batchfiles.php
  • http://ss64.com/nt/syntax.htmlhttp://ss64.com/nt/
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11971537

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档