目前,我有一个循环遍历项目列表并将它们复制到目录(存档)。但是,列表中的一项(路径名中有一个全局变量)被“字面”解释(作为文本而不是代码)。我知道通常你可以通过 (^^) 转义该行,将其解释为代码而不是文本,但显然我在这里做错了什么,因为它不起作用......
my.list 中存在问题的项目(其中包含转义符)是:
location\foo^^%date:~0,3%*.zip
Run Code Online (Sandbox Code Playgroud)
我正在使用的代码是...
for /f "delims=" %%a in (my.list) do (
echo "%%a"
)
Run Code Online (Sandbox Code Playgroud)
回声的
"location\foo^^%date:~0,3%*.zip"
Run Code Online (Sandbox Code Playgroud)
代替
location\fooMON*.zip
Run Code Online (Sandbox Code Playgroud)
任何帮助将不胜感激。
我只是对Windows批处理中的插入符号逃逸的一个特定情况感到好奇:
请将以下代码保存为文件ttt.bat,并ttt.bat在命令提示符下运行,为什么我必须重复5次插入符号(或克拉?)字符^才能使这个"没有新的线路回声"技巧工作?我只想'|'在回显的字符串中放一个管道.
有一些关于Windows批处理转义的文档,但是出于案例研究的目的,你能解释一下这个例子中使用的每个插入字符的含义是什么吗?谢谢!
@echo off
SetLocal EnableDelayedExpansion
set foo=Hello world
set bar=Why why
echo|set /P=!foo! ^^^^^| !bar!
EndLocal
Run Code Online (Sandbox Code Playgroud) 我的批处理程序中出现奇怪的错误。我认为问题在于启用延迟扩展,但我应用的修复不起作用。这是我的代码:
setlocal ENABLEDELAYEDEXPANSION
for /l %%x in (1, 1, 3) do (
set ff=Firefox_45_0.0_%%x
echo %%x
firefox.exe -CreateProfile "%ff% %homedrive%%homepath%\Desktop\Firefoxes\Profiles\Firefox_45_0.0_%%x"
)
Run Code Online (Sandbox Code Playgroud)
ff 没有任何价值,尽管我使用了延迟扩展。解决办法是什么?
编辑:命令打印到控制台(我不使用@echo off)
C:\Users\Home2\Desktop\Firefoxes\Versions\Firefox_45_0.0>(
set ff=Firefox_45_0.0_1
echo 1
firefox.exe -CreateProfile "!ff! C:\Users\Home2\Desktop\Firefoxes\Profiles\Firefox_45_0.0_1"
)
Run Code Online (Sandbox Code Playgroud)
有趣的是,它实际上按预期执行,尽管它打印了 !ff! 在控制台中。
我是批处理新手,因此我无法弄清楚,为什么会出现语法错误??
这是我的代码:
set /p hostname1=<a.txt
echo %hostname1%
PAUSE
IF %hostname1% == 0 (
SET %hostname02% = 1
echo %hostname02% >> a.txt
PAUSE
)
IF %hostname1% == 1 (
SET %hostname03% = 2
echo %hostname03% >> a.txt
PAUSE
exit
)
IF %hostname1% == 2 (
echo MSGBOX "Message" > %temp%\TEMPmessage.vbs
call %temp%\TEMPmessage.vbs
del %temp%\TEMPmessage.vbs /f /q
)
Run Code Online (Sandbox Code Playgroud)
这只是一个“为了好玩”的项目,但我想知道为什么我会收到这个烦人的错误!
我有批处理文件的以下问题.我简化了下面的问题.
运行以下批处理文件foo.bat将返回word标准输出(在本例中为命令提示符窗口),而不是hey.
@SET 1word="hey"
@ECHO %1word%
Run Code Online (Sandbox Code Playgroud)
但是,echo %1word%从命令行执行返回hey.
这应该/可能是这样的原因吗?是否不允许数字为环境变量名称添加前缀?
使用我想要的批处理文件:
1) 打开记事本
2)在记事本中写一些东西并保存
有没有可能这样做。你怎么能这样做?
我想在 PowerShell CLI 中以及批处理脚本中实现我可以做的事情:
PS C:\Users\andreas.luckert> $timestamp = Get-Date -UFormat "%d-%m-%Y--%R-UTC%Z" | ForEach-Object { $_ -replace ":", "." }
PS C:\Users\andreas.luckert> echo $timestamp
26-11-2021--15.55-UTC+01
Run Code Online (Sandbox Code Playgroud)
现在,在我的批处理脚本中,我尝试了类似于以下的方法
SET _timestamp=('Get-Date -UFormat "%d-%m-%Y--%R-UTC%Z" | ForEach-Object { $_ -replace ":", "." }')
Run Code Online (Sandbox Code Playgroud)
然而,它不起作用。
像这样的解决方案对我来说看起来有点老套,批处理变量的一般说明在这种情况下没有帮助,并且与我在一开始提到的漂亮干净的 PowerShell 命令相比,所有这些方法在语法方面都非常丑陋。此外,它们都不包括时区,这对我来说很重要。
powershell timestamp batch-file batch-processing timestamp-with-timezone
batch-file ×7
windows ×4
escaping ×2
caret ×1
character ×1
cmd ×1
exe ×1
file ×1
for-loop ×1
numbers ×1
numeric ×1
powershell ×1
timestamp ×1
variables ×1
windows-10 ×1