批处理文件中的循环迭代慢

时间:2018-10-01 03:02:39

标签: powershell batch-file

所以我正在制作批处理脚本,我需要在for中运行powershell命令,但是它的运行速度非常慢,我不知道如何提高效率,我在这方面很陌生。这是我的代码的一部分:

for /f "tokens=*" %%G in (myfile.txt) do (
       powershell -command '%%G' -replace ',+', ' ' >> newfile.txt
)

2 个答案:

答案 0 :(得分:0)

因为您说自己是新手。逐步增加该主题非常重要。使用Microsoft提供的所有免费内容(Microsoft Virtual AcademyMS Channel9TechNet Virtual Labslabsondemand),或使用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