我正在编写一个批处理文件,我需要输出一个包含'!'的字符串 到另一个文件.但当我将该字符串回显给另一个文件时,它会删除"!" 从输出.
例如:输入:
set LINE=Hi this is! output
echo !LINE!>>new_file.txt
Run Code Online (Sandbox Code Playgroud)
new_file.txt中的输出是:
Hi this is output
Run Code Online (Sandbox Code Playgroud)
此外,如果输入是
set LINE=Hello!! this is output!!
echo !LINE!>>new_file.txt
Run Code Online (Sandbox Code Playgroud)
new_file.txt中的输出:
Hello
Run Code Online (Sandbox Code Playgroud)
因此,它跳过了!(感叹号)从输出到new_file.如果我使用%LINE%,那么它只是在输出文件中显示"echo is on".
请建议一种方法来克服这个问题.
Windows批处理文件中的长命令可以通过使用在Windows Vista批处理(.bat)文件中拆分多行的Long命令中^提到的方式拆分为多行.
但是,如果插入符号位于双引号字符串中,则不起作用.例如:
echo "A very long line I want to ^
split into two lines"
Run Code Online (Sandbox Code Playgroud)
这将打印"A very long line I want to ^并告诉我split是一个未知的命令.
有办法解决这个问题吗?
运行此批处理文件
@echo off
set a=some value with (parentheses) inside
if 1 == 1 (
set PATH=%a%
)
Run Code Online (Sandbox Code Playgroud)
给出inside was unexpected at this time.错误.
如何转义a变量以避免此错误?
假设我们想要使用以下命令在Windows中创建一个空文件:
type nul > C:\does\not\exist\file.txt
Run Code Online (Sandbox Code Playgroud)
目录不存在,所以我们得到错误:
The system cannot find the path specified
Run Code Online (Sandbox Code Playgroud)
如果你打印%errorlevel%输出是:
echo %errorlevel%
0
Run Code Online (Sandbox Code Playgroud)
但命令没有成功!
我注意到,%errorlevel%如果你使用重定向,窗口不会设置最后一个命令.
有没有解决的办法?
是否可以在批处理文件中的回显行中添加新的行字符?
基本上我希望能够做到相当于:
echo Hello\nWorld
Run Code Online (Sandbox Code Playgroud)
您可以在Linux中轻松完成此操作,但我无法解决如何在Windows中执行此操作.
我一直在努力尝试在这个批处理文件中获得正确的语法,我无法弄清楚为什么有些东西不起作用.
i每次执行此变量时,变量都不会增加.strc似乎没有连接.这是我的代码:
set i=0
set "strc=concat:"
for %%f in (*.mp4) do (
set /a i+=1
set "str=intermediate%i%.ts"
set strc="%strc% %str%|"
ffmpeg -i "%%f" -c copy -bsf:v h264_mp4toannexb -f mpegts "%str%"
)
set strc="%strc:-1%"
ffmpeg -i "%strc%" -c copy -bsf:a aac_adtstoasc Output.mp4
Run Code Online (Sandbox Code Playgroud) 我想将一个字符串分成两部分,而不使用任何for循环.
例如,我在变量中有字符串:
str=45:abc
Run Code Online (Sandbox Code Playgroud)
我想进入45变量和abc另一个变量.是否可以在批处理文件中?
模式就像某些数字:somestring
如果我调用
Rscript -e "print('hello')"
Run Code Online (Sandbox Code Playgroud)
它正确打印出答案
[1] "hello"
Run Code Online (Sandbox Code Playgroud)
但是,如果我切换单引号和双引号,则不起作用,并且看起来双引号被删除了:
Rscript -e 'print("hello")'
Run Code Online (Sandbox Code Playgroud)
给出:
Error in print(hello) : object 'hello' not found
Execution halted
Run Code Online (Sandbox Code Playgroud)
请注意,它不是 powershell 错误地进行转义。Echoing 只给出预期的结果:
PS> echo 'print("hello")'
print("hello")
PS> echo "print('hello')"
print('hello')
Run Code Online (Sandbox Code Playgroud)
在 macOs 或 Linux 上没有观察到相同的行为,这两种变体都被正确解析。
有趣的是,command.com 更疯狂:
C:>Rscript -e "print('hello')"
[1] "hello"
C:>Rscript -e 'print("hello")'
[1] "print(hello)"
Run Code Online (Sandbox Code Playgroud)
我的意思是……什么?!?这已经在这里提到了:
但没有关于它的解释。在我看来,这是 Windows 上 Rscript 的一个错误,但我想听听其他意见。
什么是"变量扩张"?这仅仅意味着"变量定义"还是其他什么?
我说的时候会发生什么setLocal EnableDelayedExpansion?谷歌不清楚.
这是一个简单但令人费解的问题.
对于未定义的Windows环境变量,例如abc
在命令提示符窗口中,ECHO [%abc%]导致[%abc%]
但在.CMD批处理文件中,ECHO [%abc%]导致[]
为什么不同?我研究了ECHO命令,但却找不到任何相关信息.我担心这个微妙差异可能适用于何处.
batch-file ×9
windows ×6
command-line ×2
variables ×2
cmd ×1
dos ×1
escaping ×1
powershell ×1
r ×1