所以我正在制作批处理脚本,我需要在for中运行powershell命令,但是它的运行速度非常慢,我不知道如何提高效率,我在这方面很陌生。这是我的代码的一部分:
for /f "tokens=*" %%G in (myfile.txt) do (
powershell -command '%%G' -replace ',+', ' ' >> newfile.txt
)
答案 0 :(得分:0)
因为您说自己是新手。逐步增加该主题非常重要。使用Microsoft提供的所有免费内容(Microsoft Virtual Academy或MS Channel9或TechNet Virtual Labs或labsondemand),或使用youtube,或至少首先查看帮助文件。还有很多免费的电子书以及分步博客。
正如其他人所说,为什么不直接在PS中这样做以读取和处理文件。尽管不是必须的,但是您可以从.bat / .cmd / .vbs等中调用.ps1,但是不必使用它来处理PS可以执行的操作。
# Giving a target file to be modified
# Check what is in the file
# Note: I am using Get-Content here, but if you have a .csv, then use the *csv* cmdlets
Get-Content -Path 'd:\temp\myfile.txt'
# Results
LIC,+CLIENT
12345,+Client1
54321,+Client2
34251,+Client3
# Test new file path
Test-Path -Path 'd:\temp\newfile.txt'
# Results
False
# Decide what to replace, code the replace
# and see what the new file content will look like when replaced
Get-Content -Path 'd:\temp\myfile.txt' |
ForEach{$_ -replace '\,\+',' '}
# Results
LIC CLIENT
12345 Client1
54321 Client2
34251 Client3
# Modify to send to a new file.
Get-Content -Path 'd:\temp\myfile.txt' |
ForEach{
$_ -replace '\,\+',' ' |
Out-File -FilePath 'D:\Temp\newfile.txt' -Append
}
# Results
Test-Path -Path 'd:\temp\newfile.txt'
True
Get-Content -Path 'd:\temp\newfile.txt'
# Results, should be the same as screen output.
LIC CLIENT
12345 Client1
54321 Client2
34251 Client3
答案 1 :(得分:0)
由于您在评论中提到要在批处理脚本中全部完成操作,因此这里是字符串替换的基本语法。您必须先将FOR
变量分配给环境变量,然后才能进行任何字符串替换。您还需要启用延迟扩展,因为您正在操作括号代码块中的变量。
@echo off
setlocal enabledelayedexpansion
(for /f "delims=" %%G in (myfile.txt) do (
set "line=%%G"
echo !line:+= !
)
)>newfile.txt
您也可以通过使用CALL ECHO
@echo off
(for /f "delims=" %%G in (myfile.txt) do (
set "line=%%G"
CALL echo %%line:+= %%
)
)>newfile.txt