我正在使用一个PowerShell脚本来查找给定目录内所有带有PATTERN的文件,打印出文档的相关行并突出显示PATTERN,然后用提供的REPLACE单词替换PATTERN,然后将文件保存回去。因此,它实际上是在编辑文件。
除了我无法更改文件外,因为Windows抱怨文件已经打开。我尝试了几种方法来解决此问题,但仍然遇到问题。也许有人可以帮助您:
param(
[string] $pattern = ""
,[string] $replace = ""
,[string] $directory ="."
,[switch] $recurse = $false
,[switch] $caseSensitive = $false)
if($pattern -eq $null -or $pattern -eq "")
{
Write-Error "Please provide a search pattern." ; return
}
if($directory -eq $null -or $directory -eq "")
{
Write-Error "Please provide a directory." ; return
}
if($replace -eq $null -or $replace -eq "")
{
Write-Error "Please provide a string to replace." ; return
}
$regexPattern = $pattern
if($caseSensitive -eq $false) { …Run Code Online (Sandbox Code Playgroud) 我有一个创建一个autosys作业来触发批处理文件,该文件将找到一个特定的字符串,然后替换接下来的4个字符.
例如,如果文件(有多行)低于内容,我正在搜索播放
疯狂的狐狸从老藤上跳下来,踢足球.
我应该用"INFA"取代"socc"
我是批处理文件的新手,我的主管一直坚持只使用批处理文件.任何帮助都会得到很大的帮助.
谢谢,乔伊
我被困在 Windows 批处理(cmd)模式搜索中。我需要在文件中搜索模式并需要返回行号。我使用了FINDSTRwith/X选项,但它也将模式匹配的行附加到行号。
此外,我没有安装任何实用程序(如 unix-utilities)的特权,以便我可以cut用来提取行号。
我正在尝试替换这一行:
# forward-socks5 / 127.0.0.1:9050 .
Run Code Online (Sandbox Code Playgroud)
这一个:
forward-socks5 / 127.0.0.1:9050 .
Run Code Online (Sandbox Code Playgroud)
这行属于一个配置文件,必须通过从开头删除#符号来启用(UN评论),除了用另一个没有#符号替换行之外,我想不出更好的方法.
任何其他想法或方法都非常有用.
顺便说一句,文本前面的空格也在那里.
我已将文本粘贴到原始文件中.
提前致谢
编辑:
我已经设法做了线添加和删除使用我发现的两个代码和平.我唯一的问题是以下代码删除了输出文件中的每一个感叹号!
@echo off
:Variables
SETLOCAL ENABLEDELAYEDEXPANSION
set InputFile=config.txt
set OutputFile=config-new.txt
set _strFind=# forward-socks5 / 127.0.0.1:9050 .
set _strInsert= forward-socks5 / 127.0.0.1:9050 .
set i=0
:Replace
for /f "usebackq tokens=1 delims=[]" %%A in (`find /n "%_strFind%" "%InputFile%"`) do (set _strNum=%%A)
for /f "usebackq delims=" %%A in ("%InputFile%") do (
set /a i = !i! + 1
echo %%A>>"%OutputFile%"
if [!i!] == [%_strNum%] (echo %_strInsert%>>"%OutputFile%") …Run Code Online (Sandbox Code Playgroud) 我需要在批处理脚本中逐字逐句阅读文本文件的内容.这些单词是空格分隔的.我试过这个,但它不起作用,只需要第一个字:
for /f "delims= " %%i in (%OUTPUT_FILE%) do echo %%i
Run Code Online (Sandbox Code Playgroud)
我也试过这个但是也不行:
for /f "tokens=* delims= " %%i in (%OUTPUT_FILE%) do echo %%i
Run Code Online (Sandbox Code Playgroud) 我试图以这种方式比较两个文件,文件1的每一行将与文件2的每一行进行比较,如果没有找到匹配,则将该行写入单独的文件.
下面是我写的代码,但它没有按预期工作,
@echo on
cd path
for /f %%a in (file1.txt) do (
for /f %%b in (file2.txt) do (
if %%a==%%b
(
echo lines are same
) else (
echo %%a >> file3.txt
)
)
)
Run Code Online (Sandbox Code Playgroud)
我收到一个错误说,命令的语法不正确.请帮我解决一下这个.
batch-file ×5
replace ×2
cmd ×1
file ×1
findstr ×1
line ×1
locking ×1
powershell ×1
scripting ×1
search ×1
string ×1
text-files ×1
windows ×1