【问题标题】:Wildcard between double quotes - Batch Script双引号之间的通配符 - 批处理脚本
【发布时间】:2015-12-13 05:05:55
【问题描述】:

我现在正在研究这个几个小时,即使在搜索互联网后我也无法弄清楚。 我用以下代码编写了一个批处理文件:

@echo off 
setlocal enableextensions disabledelayedexpansion

set "search=return ".*" "
set "replace=return "%DATE%""

set "textFile=C:\PathToFile"

for /f "delims=" %%i in ('type "%textFile%" ^& break ^> "%textFile%" ') do (
 set "line=%%i"
 setlocal enabledelayedexpansion
 set "line=!line:%search%=%replace%!"
 >>"%textFile%" echo(!line!
 endlocal
)

我的问题是,在“搜索”部分,我需要在双引号之间使用一种通配符。我试过正则表达式,我试过 *, ?并转义引号,但没有任何效果!上面的代码也不起作用。我敢打赌这是一个非常简单的错误,但我无法弄清楚。

我正在文件中寻找类似的内容:return "6.20.99.99"

结果应该是:return "16.09.2015"

编辑 如果有人遇到同样的问题 - 我在评论中发布了解决方案,但又是这样:

jrepl "return \q.*\q" "return \q%date%\q" /X /F "C:\PathToFile" /o -

【问题讨论】:

  • 你所说的for集合中的break是什么(in之后的部分)?没有这样的命令,你用的是第三方工具吗?
  • 如果你想在一个变量中进行搜索和替换,只需关注它并删除这里无用的代码。让代码简单。
  • @aschipfl break 是一个内部命令,只会以被滥用的方式创建一个零字节文件。
  • 我不知道,@foxidrive;从哪个 Windows 版本开始可用?
  • @aschipfl 它可以追溯到 MSDOS 并且很少使用。制作零字节文件对它来说是一项新工作。 :)

标签: batch-file search replace


【解决方案1】:

这符合您的描述并输入今天的日期:
input.txt 和 output.txt 是正在使用的文件。

@echo off
for /f "tokens=2 delims==" %%a in ('wmic OS Get localdatetime /value') do set "dt=%%a"
set "day=%dt:~6,2%.%dt:~4,2%.%dt:~0,4%"
call jrepl "return \q.*\q" "return \q%day%\q" /x /f "input.txt" /o "output.txt"

这使用名为 Jrepl.bat 的本机 Windows 批处理脚本(由 dbenham 提供)
jrepl.bat 可以从以下位置下载:https://www.dropbox.com/s/4otci4d4s8x5ni4/Jrepl.bat
也可以在这里找到:http://www.dostips.com/forum/viewtopic.php?f=3&t=6044

将它放在与批处理文件相同的文件夹中,或放在系统路径上的文件夹中。

【讨论】:

  • 我实际上试图避免使用第三方软件。但如果没有任何效果,我会回到这个。谢谢!
  • @StefanieWeber 我可以理解,虽然 Dave Benham 的批处理文件没有使用第三方软件(并且也托管在 Stackoverflow 上),并且 wmic 可执行文件也内置在现代 Windows 中。
  • 我试过了,这就是我现在所拥有的。它有点短:jrepl "return \q.*\q" "return \q%date%\q" /X /F "C:\PathToFile" /o - 它有效!我很高兴!
  • @StefanieWeber 酷。 :) 只是评论%date% 变量随地区和用户设置而变化,因此在其他机器上使用时不可靠。如果它适用于您的情况,那很好。
【解决方案2】:
set "search=return ^".*^" "
echo %search%

将返回

return ".*"

更新:子字符串也不能与通配符一起使用。 http://ss64.com/nt/syntax-replace.html

【讨论】:

  • 感谢您的回答!我试过了,它仍然不起作用。我没有使用任何第三方软件,所以我认为 .* 在我的代码中是错误的。它在双引号之间找不到任何内容,因此不会将值更改为日期
猜你喜欢
  • 1970-01-01
  • 2010-10-06
  • 1970-01-01
  • 2021-05-09
  • 1970-01-01
  • 1970-01-01
  • 2018-02-18
  • 2010-12-23
相关资源
最近更新 更多