2017-08-25 43 views
0

我對批處理腳本絕對陌生,想知道如何將findstr的輸出轉換爲變量?獲取FIN變量的輸出

@echo off 
set /p assetPath="Set asset path: " 
setlocal enableDelayedExpansion 
for /r %assetPath% %%p in (*.png) do (
    findstr "guid" "%%p".meta 
    if not !errorlevel!==0 (
     echo Could not find guid of file: %%p! 
    ) 
) 
pause 

FINDSTR將輸出 「GUID:d46decd9d3bbf0d46b31a3d4ae0f18ff」 爲包含一個GUID的每個文件,我該怎麼辦這個業務並保存的GUID到一個變量?

+0

提示:'如果不是!errorlevel!== 0'也可以寫成'if errorlevel 1',而你的代碼根本不需要延遲擴展,請參閱Microsoft支持文章[測試批處理文件中的特定錯誤級別](https://support.microsoft.com/en-us/kb/69576)。 Magoo發佈的良好演示代碼需要延遲擴展。 '如果errorlevel 1'仍然會在Magoo的代碼中更快一點,並不明顯更快,但它會更快。 – Mofi

回答

1
@echo off 
set /p assetPath="Set asset path: " 
setlocal enableDelayedExpansion 
SET /A COUNT=0 
for /r %assetPath% %%p in (*.png) do (
    FOR /F "TOKENS=1*" %%f in (' findstr "guid" "%%p".meta ') DO (
    if not !errorlevel!==0 (
     echo Could not find guid of file: %%p! 
    ) ELSE (
     SET /A COUNT+=1 
     SET "FILE[!COUNT!]=%%p" 
     SET "GUID[!COUNT!]=%%g" 
    )) 
) 
FOR /L %%x in (1,1,%COUNT%) DO echo !GUID[%%x]! is guid for !FILE[%%x]! 
pause 

這應該爲找到的文件設置FILE [*]和GUID [*]並報告結果。

+0

它只對每個文件輸出「是guid」,我認爲你錯過了「在行尾」SET「GUID ...」 – Reeley

+0

是的 - 非常正確和固定。報告行有'%% x'和'%% a'的混合 - 這些必須一致。 – Magoo

+0

現在就像一個魅力,感謝您的快速幫助! – Reeley