相关疑难解决方法(0)

批处理文件:防止 for /f 循环中的字面解释

目前,我有一个循环遍历项目列表并将它们复制到目录(存档)。但是,列表中的一项(路径名中有一个全局变量)被“字面”解释(作为文本而不是代码)。我知道通常你可以通过 (^^) 转义该行,将其解释为代码而不是文本,但显然我在这里做错了什么,因为它不起作用......

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 for-loop cmd escaping batch-file

1
推荐指数
1
解决办法
1096
查看次数

在set/P提示符中Dos/Windows批处理符号转义

我只是对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)

windows escaping character batch-file caret

1
推荐指数
1
解决办法
900
查看次数

启用延迟扩展不起作用

我的批处理程序中出现奇怪的错误。我认为问题在于启用延迟扩展,但我应用的修复不起作用。这是我的代码:

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! 在控制台中。

windows batch-file command-prompt windows-10

1
推荐指数
1
解决办法
3929
查看次数

命令的语法不正确?

我是批处理新手,因此我无法弄清楚,为什么会出现语法错误??

这是我的代码:

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)

这只是一个“为了好玩”的项目,但我想知道为什么我会收到这个烦人的错误!

batch-file

1
推荐指数
1
解决办法
1万
查看次数

有效批处理文件变量名称?

我有批处理文件的以下问题.我简化了下面的问题.

运行以下批处理文件foo.bat将返回word标准输出(在本例中为命令提示符窗口),而不是hey.

foo.bat

@SET 1word="hey"
@ECHO %1word%
Run Code Online (Sandbox Code Playgroud)

但是,echo %1word%从命令行执行返回hey.

这应该/可能是这样的原因吗?是否不允许数字为环境变量名称添加前缀?

variables numbers file numeric batch-file

0
推荐指数
1
解决办法
3084
查看次数

打开记事本并使用 .bat 文件写一些东西

使用我想要的批处理文件:

1) 打开记事本

2)在记事本中写一些东西并保存

有没有可能这样做。你怎么能这样做?

windows exe batch-file

0
推荐指数
1
解决办法
9612
查看次数

将 PowerShell 命令结果分配给批处理脚本中的变量

我想在 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

0
推荐指数
1
解决办法
4686
查看次数