查找字符串并批量替换下一个单词

时间:2015-06-03 19:33:52

标签: batch-file

我的文件有一些行......例如

NSDirectoryEnumerator *directoryEnumerator = [[NSFileManager defaultManager] enumeratorAtPath:directory];


for (NSString *file in directoryEnumerator) {
    NSString *filename;
    filename=file;
    filename= [directory stringByAppendingPathComponent:file];
    processFile(filename);
}

我设置了一个变量" replace = test_15_5" ..和" Search = config.vm.box"

我需要一个批量代码来搜索" config.vm.box"在文件中并替换下一个字符串" test_15_4"使用%替换%..代码应替换文件中的每个匹配项。

我写过小代码但没有成功:

line no 20    # Every Vagrant virtual environment requires a box to build off

line no 21         config.vm.box = "test_15_4"

line no 22    # The URL from where the 'config.vm.box' box will be fetched if it

line no 23    config.vm.box_url = "file:\\d:\\images\\test.box"

1 个答案:

答案 0 :(得分:1)

用于替换批处理文件的syntaxView padding = new View(this); padding.setHeight(100); listView.addHeaderView(padding);

你的问题有点复杂,因为你需要双重扩展。您可以使用delayed expansion来实现它。

for命令中使用%variable:StrToFind=NewStr%而非tokens=*,因为您不需要对该行进行标记。

不需要delims=:如果找到了搜索,则会被替换,否则会保留原始文本。

if

<强>更新

我试着用搜索文本重新创建这条线。

setlocal EnableDelayedExpansion

rem set variables here: INPUT, OUTPUT, SEARCH, REPLACE

del %OUTPUT%

for /f "tokens=*" %%T in (%INPUT%) do (
  set PROCESSEDLINE=%%T
  >> %OUTPUT% echo !PROCESSEDLINE:%SEARCH%=%REPLACE%!
)

但是,批处理文件解释器中的简单替换机制将与包含空格或for /f "tokens=*" %%T in (%INPUT%) do ( set PROCESSEDLINE=%%T if !PROCESSEDLINE!==!PROCESSEDLINE:%SEARCH%=! ( rem not found >> %OUTPUT% echo !PROCESSEDLINE! ) else ( rem found >> %OUTPUT% echo %SEARCH% %REPLACE% ) ) 等特殊字符的搜索字符串完全混淆。在这种情况下,我更喜欢使用更复杂的工具来搜索和替换字符串:sed。它作为UnxUtils的一部分移植到独立的Windows应用程序。

使用=,替换命令为:

sed

它需要单独的输入和输出文件,就像我上面的脚本一样。