从 Powershell NULL 返回的批处理变量
Batch Variable Returned from Powershell NULL
我有一堆文件需要根据文件中的字符串重命名。但是,我必须在批处理文件中执行此操作,并且必须使用 Windows 服务器 (Powershell V2) 的原生文件来完成。这些文件都包含以下内容:
页脚一些我想保留的名字
由于常规批处理中的 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.
找到问题了!呸!
我使用的是 "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"
)
我有一堆文件需要根据文件中的字符串重命名。但是,我必须在批处理文件中执行此操作,并且必须使用 Windows 服务器 (Powershell V2) 的原生文件来完成。这些文件都包含以下内容: 页脚一些我想保留的名字
由于常规批处理中的 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.
找到问题了!呸!
我使用的是 "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"
)