3

ファイル名を FOR ループ パラメータとして別のバッチ ファイルに渡そうとしています。問題は、ファイル名に特殊文字 (特に %) が含まれている場合、呼び出されたスクリプトにパラメーターが渡されないことです。EG -

は次のFIRST_SCRIPT.batとおりです -

cd "C:\theFolder"
for /R %%a in (*.*) do call SECOND_SCRIPT "%%~a"

は次のSECOND_SCRIPT.batとおりです -

ECHO %1

ファイル名に % が含まれている場合。「% of STATS.txt」、出力は最終的に

of STATS.txt

これは間違っています。使用してみSetlocal DisableDelayedExpansionましたが、ほとんど成功しませんでした

Setlocal DisableDelayedExpansion
for /R %%a in (*.*) do (
SET "var=%%~a" 
Setlocal EnableDelayedExpansion
call TEST_UPGRADE "%var%" "%%~a"
)

他のスタックオーバーフローの回答がありますが、それらはすべて % 文字を事前に知る必要があります。ファイル名は私たちの管理下にないため、これらのソリューションは機能しません。これを処理する方法はありますか?

ありがとう!

プラットフォーム: Windows XP の場合は cmd.exe

4

3 に答える 3

4

一時ファイルを使用したソリューション:

first.bat

@ECHO OFF &SETLOCAL
REM to escape the '%' use a second '%'
SET "var=40%% &off!.txt"
REM get a random temp file name
:loop
SET "tname=%temp%%random%%random%"
IF EXIST "%tname%" GOTO :loop
SETLOCAL ENABLEDELAYEDEXPANSION
REM save the variable in the file
>"%tname%" (ECHO(!var!)
CALL "second.bat" "%tname%"
ENDLOCAL

second.bat

@ECHO OFF &SETLOCAL
SET "tname=%~1"
<"%tname%" set/p"var="
SETLOCAL ENABLEDELAYEDEXPANSION
ECHO !var!
DEL "%tname%" /F /Q

..出力は次のとおりです。

40% &off!.txt
于 2013-08-19T02:24:56.773 に答える