- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
这是我的脚本:
@echo off
setlocal
for /f %%i in ('echo aaa/') do set REPO=%%i
if "%REPO%"=="" (
echo No input
) else (
echo %REPO:~-1%
echo %REPO:~0,-1%
if %REPO:~-1%==/ set REPO=%REPO:~0,-1%
echo %REPO%
)
endlocal
请注意:
c:\dev\shunra\GlobalLibrary\Server>c:\Utils\hgbackup.cmd
/
aaa
aaa/
c:\dev\shunra\GlobalLibrary\Server>
这是怎么回事?
编辑
请注意,我正在为 REPO 分配一些计算结果为“aaa”的东西,因此我希望它打印“aaa”,而不是“aaa/”。这让我发疯。
EDIT2
显然,这是罪魁祸首(来自 set 命令的帮助):
Finally, support for delayed environment variable expansion has been
added. This support is always disabled by default, but may be
enabled/disabled via the /V command line switch to CMD.EXE. See CMD /?
Delayed environment variable expansion is useful for getting around
the limitations of the current expansion which happens when a line
of text is read, not when it is executed. The following example
demonstrates the problem with immediate variable expansion:
set VAR=before
if "%VAR%" == "before" (
set VAR=after
if "%VAR%" == "after" @echo If you see this, it worked
)
would never display the message, since the %VAR% in BOTH IF statements
is substituted when the first IF statement is read, since it logically
includes the body of the IF, which is a compound statement. So the
IF inside the compound statement is really comparing "before" with
"after" which will never be equal. Similarly, the following example
will not work as expected:
set LIST=
for %i in (*) do set LIST=%LIST% %i
echo %LIST%
in that it will NOT build up a list of files in the current directory,
but instead will just set the LIST variable to the last file found.
Again, this is because the %LIST% is expanded just once when the
FOR statement is read, and at that time the LIST variable is empty.
So the actual FOR loop we are executing is:
for %i in (*) do set LIST= %i
which just keeps setting LIST to the last file found.
Delayed environment variable expansion allows you to use a different
character (the exclamation mark) to expand environment variables at
execution time. If delayed variable expansion is enabled, the above
examples could be written as follows to work as intended:
set VAR=before
if "%VAR%" == "before" (
set VAR=after
if "!VAR!" == "after" @echo If you see this, it worked
)
set LIST=
for %i in (*) do set LIST=!LIST! %i
echo %LIST%
但我尝试使用 !
符号,它仍然对我不起作用。我使用 get !
打印在屏幕上还是错误的结果。
最佳答案
正如评论中所讨论的那样,在您编辑的问题中,您需要延迟扩展。
必须启用延迟扩展才能使用它。在批处理脚本中,您可以使用 setlocal enableDelayedExpansion
@echo off
setlocal enableDelayedExpansion
for /f %%i in ('echo aaa/') do set REPO=%%i
if "%REPO%"=="" (
echo No input
) else (
echo %REPO:~-1%
echo %REPO:~0,-1%
if %REPO:~-1%==/ set REPO=%REPO:~0,-1%
echo !REPO!
)
endlocal
编辑
如果 IN() 子句发生更改,导致 REPO 未定义,则上述操作将失败。例如:in (echo.)
失败是因为整个 IF/ELSE 结构必须有有效的语法,即使 ELSE 子句也不会被执行。
如果 REPO 未定义,则
if %REPO:~-1%==/ set REPO=%REPO:~0,-1%
扩展为
if ~-1REPO:~0,-1
这是无效的语法。
问题再次通过延迟扩展解决。
@echo off
setlocal enableDelayedExpansion
for /f %%i in ('echo.') do set REPO=%%i
if "%REPO%"=="" (
echo No input
) else (
echo %REPO:~-1%
echo %REPO:~0,-1%
if !REPO:~-1!==/ set REPO=%REPO:~0,-1%
echo !REPO!
)
endlocal
关于windows - 如何在 Windows 批处理脚本中保留 "delayed variable expansion",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13202895/
我为一个项目创建了一个基于 Java 的 tic-tac-toe 游戏。该游戏有一个带有 Jbutton 的 Jframe 显示,可通过事件监听器响应鼠标点击。 GUI 显示可通过拖动边缘来扩展。但是
我知道 mat-expansion-panel-headers 是一个按钮。单击该按钮上的任意位置可切换扩展的打开/关闭。但我不想让用户单击标题上的任何位置并打开它。应该有一个小按钮。单击该按钮将打开
我想做一些图像预处理,但有一个步骤我不确定最好的方法。 我有带有注释的有趣区域的 MRI 图像,我检测轮廓并裁剪图像: 我将在此处发布我的代码,以便您了解我如何完成前面的步骤以及我们拥有的数据 low
我无法以编程方式添加 mat-expansion-panel。我想在用户通过单击按钮调用函数时添加它们。根据需要多次添加扩展面板。 我尝试为 mat-expansion 添加 HTML 标签,这是一种
这个问题在这里已经有了答案: Dynamic variable names in Bash (17 个回答) 5年前关闭。 我能够批量执行以下操作,但是在我的一生中,我无法弄清楚如何在 bash 中执
在 makefile 中,我使用 define 指令定义一个变量。该变量将保存我想要执行的可配置命令列表。 我希望此变量获取文件列表(例如 .foo 文件)。这些文件是在 makefile 执行期间创
Cantor expansion自然数n的是 n = ak * k!+a(k − 1) *(k −1)!+.... + a2 * 2!+a1 *1! 其中所有的ai(数字)满足0≤ai≤i 我知道它
有什么办法可以关闭这里文档中的参数扩展吗? shell 命令: $ cat > analyze.sh tmp awk -F '(' '{print $NF}' asr.log | awk '{pr
这个问题在这里已经有了答案: 关闭 11 年前。 Possible Duplicate: Why i am not getting the expected output in the follow
默认情况下,当用户单击标题中的任意位置时,Angular 扩展面板会展开。但是我想更新此功能,以便只有右侧箭头按钮应该触发扩展事件。有人可以帮助我实现这一目标吗?下面是一个示例代码。 https://
我有一个 formArray与多个 formGroups .每个formGroup位于扩展面板内。现在当我点击 "Check what's missing"按钮,表单验证运行并显示无效表单字段的错误。
我正在尝试使用 *ngFor 在 Mat-accordian 中显示多个 Mat-expansion-panel。我需要点击一个我能够做到的按钮来添加一个新的垫子扩展面板。我还需要在单击按钮时展开(打
“变量扩展”是什么意思?它的意思只是“变量定义”,还是其他什么意思? 当我说setLocal EnableDelayedExpansion时会发生什么? Google 并不清楚。 最佳答案 变量扩展表
参见 this Stackblitz . Angular 材mat-expansion-panel允许 lazy rendering , This is the expansion t
这个问题在这里已经有了答案: Explanation of colon operator in ": ${foo=value}" (2 个答案) 关闭 7 年前。 试图理解用 bash 编写的 do
我想知道是否有办法为已禁用的 Mat-Expansion-Panel 设置样式。我在标题中有按钮并与它们交互会切换面板,所以我相信最好只用按钮切换面板并禁用面板本身。 但是,当我禁用面板时,面板内的所
Bash 具有称为历史扩展的功能,您可以使用快捷方式扩展到您之前在 bash 中键入的内容。 示例:!! - 扩展为之前的命令 $> rm -f /var/log/access.log rm: /va
我正在编写 CSS 来更改焦点和悬停时文本和箭头指示器的颜色。然而,指示器箭头单独起作用。当您将鼠标悬停在整个面板上时,我希望它发生变化。目前箭头指示器只有当你直接悬停在它上面时才会改 rebase
我添加了 Angular material mat-expansion-panel 到 select option ,当我点击选择菜单时,mat-expansion-panel 自动打开,任何人都知道
问题: 是否可以让一个函数接收一个既有百分号又有感叹号的参数? 问题: 我在 FOR/D 中以这种方式处理目录: FOR /D %%d IN ("%~1\*") DO ( CALL :proc
我是一名优秀的程序员,十分优秀!