从Powershell NULL返回的批处理变量

时间:2016-04-01 14:50:19

标签: batch-file powershell-v2.0

我有一堆文件需要根据文件中的字符串重命名。但是,我必须在批处理文件中执行此操作,并且必须使用Windows Server(Powershell V2)本机的任何内容来完成此操作。这些文件都包含以下内容: FOOTER我想保留一些名字

由于常规批处理中的find / replace有点弱,我使用以下Powershell命令来提取所需的文本并且它工作得很好但是我无法获得powershell返回的字符串来保持。

@ECHO ON
SETLOCAL ENABLEDELAYEDEXPANSION
for %%f in (*.pdf) do (
    FOR /F "usebackq delims=" %%v IN (`powershell -command "$match = (Get-Content %%~nf.txt)  | select-string -pattern 'FOOTER '; $match -replace 'FOOTER ',''"`) DO set g=%%v
    echo %g%
)

从结果中,您可以看到设置了“g”但是当我去使用它时,它是空的。我也试过用“!”围绕g。有什么想法吗?

C:\TEMP>(
FOR /F "usebackq delims=" %v IN (`powershell -command "$match = (Get-Content A.txt)  | select-string -pattern 'FOOTER '; $match -replace 'FOOTER ',''"`) DO set g=%v
 echo
)

C:\TEMP>set g=SOME OTHER FILE
ECHO is on.

C:\TEMP>(
FOR /F "usebackq delims=" %v IN (`powershell -command "$match = (Get-Content B.txt)  | select-string -pattern 'FOOTER '; $match -replace 'FOOTER ',''"`) DO set g=%v
 echo
)

C:\TEMP>set g=SOME FILE NAME
ECHO is on.

1 个答案:

答案 0 :(得分:1)

发现问题了!卫生署!

我正在使用" echo%g%"而不是" echo!g!"

@ECHO ON
SETLOCAL ENABLEDELAYEDEXPANSION
mkdir final
for %%f in (*.pdf) do (
    FOR /F "usebackq delims=" %%v IN (`powershell -command "$match = (Get-Content %%~nf.txt)  | select-string -pattern 'FOOTER '; $match -replace 'FOOTER ',''"`) DO set g=%%v
    echo !g!
    rename %%~nf.txt "final/!g!.txt"
    rename %%~nf.pdf "final/!g!.pdf"
)