SET IrfanFile32=i_view32.exe
FOR /F "tokens=*" %%a IN ('dir /b /s "%ProgramFiles%\%IrfanFile32%" 2^>NUL') DO SET IrfanPath=%%a
這導致想變量被設置,如果相應的文件被發現。但是,當我最後一行改爲
FOR /F "tokens=*" %%a IN ('dir /b /s "%PROGRAMFILES(X86)%\%IrfanFile32%"') DO SET IrfanPath=%%a
它說:「\ IrfanView中\ i_view32.exe」不能語法在這一點上,這顯然指的是一組指令處理。 (回聲的作用是給出正確的結果)。 SET有似乎括號中的問題,但是當我想我可以用引號
FOR /F "tokens=*" %%a IN ('dir /b /s "%PROGRAMFILES(X86)%\%IrfanFile32%"') DO SET "IrfanPath=%%a"
我注意到,它並沒有解決它解決這個問題。 我錯過了什麼/我該如何實現? (我讀delayedexpansion正常的變數,但是是適用於像%%的循環變量,如果是的話:怎麼了?)
以下是代碼作爲一個整體:
REM @echo off
SETLOCAL ENABLEDELAYEDEXPANSION
SET IrfanFile32=i_view32.exe
SET IrfanFile64=i_view64.exe
SET IrfanParams=""
SET SourcePath=%~1\nul
:Start
FOR /F "tokens=3,4,5,6,7,8,9" %%a IN ('REG QUERY HKCU\Environment /v IrfanPath ^|find "IrfanPath"') DO (
REM echo %IrfanPath%
SET IrfanPath=%%a %%b %%c %%d %%e %%f %%g
)
echo.
IF NOT DEFINED IrfanPath (GOTO Init) ELSE (GOTO Main)
:Init
echo Dies scheint mein erster Start auf diesem System zu sein.
echo Ich benötige IrfanView (inkl. JPG_TRANSFORM Plugin) um zu funktionieren
echo und suche nun im Ordner %ProgramFiles% und allen Unterverzeichnissen
echo nach IrfanViews Startdatei namens %IrfanFile32% bzw. %IrfanFile64%.
echo.
IF EXIST "%PROGRAMFILES(X86)%" echo 64bit Betriebssystem gefunden, suche zusätzlich in %PROGRAMFILES(X86)%.
echo.
FOR /F "tokens=*" %%a IN ('dir /b /s "%ProgramFiles%\%IrfanFile32%" 2^>NUL') DO SET IrfanPath=%%a
FOR /F "tokens=*" %%a IN ('dir /b /s "%ProgramFiles%\%IrfanFile64%" 2^>NUL') DO SET IrfanPath=%%a
FOR /F "tokens=*" %%a IN ('dir /b /s "%PROGRAMFILES(X86)%\%IrfanFile32%"') DO SET IrfanPath=%%a
IF DEFINED IrfanPath (
echo Ich habe IrfanView hier gefunden: %IrfanPath%
:Entscheidung
SET /P PathKorrekt=Ist das der gewünschte Pfad? [^(J^)a/^(N^)ein]
if /i {!PathKorrekt!}=={j} (goto :yes)
if /i {!PathKorrekt!}=={ja} (goto :yes)
if /i {!PathKorrekt!}=={n} (goto :no)
if /i {!PathKorrekt!}=={nein} (goto :no)
echo Das war keine gültige Antwort. Benutze ja, nein, j oder n.
GOTO Entscheidung
:yes
REG ADD HKCU\Environment /v IrfanPath /d "%IrfanPath%" >nul
GOTO Start
)
:no
SET /P IrfanPath=Bitte gib den Pfad zur %IrfanFile32% bzw. %IrfanFile64% an:
IF NOT EXIST "%IrfanPath%\%IrfanFile32%" (
IF NOT EXIST "%IrfanPath%\%IrfanFile64%" (
echo Keine %IrfanFile32% oder %IrfanFile64% in diesem Ordner gefunden, nochmal bitte.
GOTO no
)
) ELSE (
IF EXIST "%IrfanPath%\%IrfanFile32%" (
REG ADD HKCU\Environment /v IrfanPath /d "%IrfanPath%\%IrfanFile32%"
)
IF EXIST "%IrfanPath%\%IrfanFile64%" (
REG ADD HKCU\Environment /v IrfanPath /d "%IrfanPath%\%IrfanFile64%"
)
PAUSE > NUL
GOTO Start
)
) else GOTO Main
:Main
REM more code here
'FOR/F「tokens = *」%% a IN('dir/b/s「%PROGRAMFILES ^(X86 ^)%\%IrfanFile32%」')DO SET「IrfanPath = %% a」' – npocmaka
上面的代碼看起來像是在查找文件「C:\ Program Files(x86)\ i_view32.exe」。你的錯誤表明在某些時候你正在引用'「\ IrfanView \ i_view32.exe」'。該錯誤不是來自您在此發佈的代碼。 –
@npocmaka:我試過了。但是,這使得它在搜索驅動器上的「無處不在」幾分鐘。 –