我有一堆文件需要根据文件中的字符串重命名。但是,我必须在批处理文件中执行此操作,并且必须使用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.
答案 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"
)