我想知道是否可能在Windows批处理文件中的同一行上有不同的彩色文本,例如,如果它说
echo hi world
Run Code Online (Sandbox Code Playgroud)
我希望"hi"成为一种颜色,"世界"成为另一种颜色.也许我可以将COLOR命令设置为变量:
set color1= color 2
set color9= color A
Run Code Online (Sandbox Code Playgroud)
然后将它们一起部署在同一行上
echo hi world
Run Code Online (Sandbox Code Playgroud)
但我不知道我会怎么做.
如何检查PATH环境变量中是否已存在目录?这是一个开始.但是,我已经设法使用下面的代码,它回显了%PATH%中的第一个目录.由于这是一个FOR循环,你会认为它将枚举%PATH%中的所有目录,但它只获得第一个目录.
有没有更好的方法呢?像%PATH%变量上运行的find或findstr之类的东西?我只想检查%PATH%目录列表中是否存在目录,以避免添加可能已存在的内容.
FOR /F "delims=;" %%P IN ("%PATH%") DO (
@ECHO %%~P
)
Run Code Online (Sandbox Code Playgroud) 有很多理由想要"转换" .bat到.exe- 隐藏/混淆实现,密码,资源路径,从批处理文件创建服务......主要是为了让你的工作看起来比实际更复杂和重要是.
不想使用第三方工具的原因也很多.
那么如果你想在.exe不使用外部软件的情况下"转换"批处理文件呢?(转换是引号,因为我认为没有真正的方法将批处理文件编译成可执行文件.有太多滥用的错误技术和广泛使用的错误,我知道的所有工具实际上创建了一个临时.bat文件,然后调用它)
在cmd.exe中编写一些最近的脚本时,我需要使用findstr正则表达式 - 客户需要标准cmd.exe命令(没有GnuWin32,Cygwin也不是VBS,也不是Powershell).
我只想知道变量是否包含任何大写字符并尝试使用:
> set myvar=abc
> echo %myvar%|findstr /r "[A-Z]"
abc
> echo %errorlevel%
0
Run Code Online (Sandbox Code Playgroud)
当%myvar%设置为abc,实际输出字符串并设置errorlevel为0,表示找到了匹配项.
但是,完整列表变体:
> echo %myvar%|findstr /r "[ABCDEFGHIJKLMNOPQRSTUVWXYZ]"
> echo %errorlevel%
1
Run Code Online (Sandbox Code Playgroud)
确实不输出的行,它正确地设置errorlevel为1.
此外:
> echo %myvar%|findstr /r "^[A-Z]*$"
> echo %errorlevel%
1
Run Code Online (Sandbox Code Playgroud)
也按预期工作.
我显然在这里遗漏了一些东西,即使它只是在findstr某种程度上被打破了.
为什么第一个(范围)正则表达式在这种情况下不起作用?
然而更奇怪的是:
> echo %myvar%|findstr /r "[A-Z]"
abc
> echo %myvar%|findstr /r "[A-Z][A-Z]"
abc
> echo %myvar%|findstr /r "[A-Z][A-Z][A-Z]"
> echo %myvar%|findstr /r …Run Code Online (Sandbox Code Playgroud) 我的文件文件与我的批处理文件所在的文件夹相同.
所以我希望我的批处理文件读取文本文件的内容,并根据该文本文件的内容,我希望它执行操作.
例如,如果文本文件包含"Hello World",那么如果它不包含Hello World,则执行类似Start VLC的操作,然后执行其他操作.
文本将自行更新.
这是我的批处理代码到目前为止,它可以从屏幕上的文本文件输出文本.
@echo off
for /f "tokens=*" %%a in (log.txt) do call :processline %%a
pause
goto :eof
:processline
echo line=%*
goto :eof
:eof
Run Code Online (Sandbox Code Playgroud) @echo off
SET /p var=Enter:
echo %var% | findstr /r "^[a-z]{2,3}$">nul 2>&1
if errorlevel 1 (echo does not contain) else (echo contains)
pause
Run Code Online (Sandbox Code Playgroud)
我正在尝试验证一个应包含2或3个字母的输入.但我尝试了所有可能的答案,它只运行if error level 1 (echo does not contain).
有谁可以帮助我吗.非常感谢.
在Unix上我会做类似的事情:
cat > file.txt
Run Code Online (Sandbox Code Playgroud)
如何在Windows命令提示符或批处理文件中执行此操作?
编辑:基本上,我正在寻找cat没有参数的功能(它从stdin读取并将其吐回到stdout).
我正在尝试检查批处理文件中的变量是否以"包含BETA某个地方开头并以其结尾").
可能吗?如果是的话,有人可以帮助我吗?
以下FINDSTR示例无法找到匹配项.
echo ffffaaa|findstr /l "ffffaaa faffaffddd"
Run Code Online (Sandbox Code Playgroud)
为什么?
假设我们有以下代码片段,文本文件sample.txt重定向到STDIN:
@echo off
< "sample.txt" (
set /P "ONE="
set /P "TWO="
findstr /R "^"
)
echo %ONE%, %TWO%
Run Code Online (Sandbox Code Playgroud)
...以及相关文本文件的内容sample.txt:
first
second
third
fourth
Run Code Online (Sandbox Code Playgroud)
控制台上返回的输出将是这个,这正是我所期望的(行first和second消耗set /P,因此findstr接收和处理剩余的行):
Run Code Online (Sandbox Code Playgroud)third fourth first, second
findstr /R "^"替换为相同的输出sort /R.
但是,当用或替换findstr命令行时,输出将是:find /V ""more
Run Code Online (Sandbox Code Playgroud)first second third fourth first, second
这似乎是,虽然set /P已经消耗的线first和second由所述最后输出线被证明,find并且也more仍然接收整个重定向数据.
为什么会这样,是什么导致这种行为?有没有办法强制find或more …