0
ファイル内の文字列に基づいて名前を変更する必要があるファイルがたくさんあります。しかし、私はバッチファイル内でこれを行う必要があり、Windows Server(PowerShell V2)のネイティブなものを使用して行う必要があります。 名前をつけたい名前を残しておきたいPowershellから返されるバッチ変数NULL
通常のバッチでの検索/置換は多少弱いので、以下の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.
PowerShellに依存している場合は、なぜバッチを使用する必要がありますか? PowerShellですべてのことを行うだけではいかがですか。あなたの実装は非常に簡単で、あなたの特定の質問は単に消えます。 –
バッチファイルには、ファイル比較プログラムやエラーレベルチェックなどの呼び出しがありますが、Powershellには依存しませんが、IMOは、通常のバッチで利用できるものより優れています(例:Findstr)。 Findstrを使ってFOOTER ABC XYZを見つけて、ABC XYZを返すだけで問題が解消されたら、それでも、なぜ変数がクリアされているのか不思議です。 – stackbacker
「バッチファイル内で実行中の他の作業」は、PowerShellでも実行できます。 (結局のところシェルです)@RBと同意します。 PowerShellで再実装する必要があります。 –