有許多錯誤,但正如你所說,你是新的。
首先,如果您輸入的文件路徑是「1」,那麼您應該安全地到達xmlmenu。
下一行會產生錯誤,因爲有一個else子句,
- 的。如果真指令必須(parenthesised)
- 的
(
必須在相同的物理線路的if
發生
- 序列
) else (
必須全部在相同的物理線路(其不需要是一樣的if
)
在任何情況下,else
都是多餘的。如果條件不成立,跳轉將不會發生,因此下一條語句行將被執行。
if
... == ...爲真,如果左邊的字符串與右邊的SRING,因此你需要爲輸入的字符串是絕對相同file://path/of/file/*/*/*/*/A/*.XML
爲if
是真實的。動作陳述也必須與if
位於同一條物理線上,所以這是語法錯誤的第二個來源。
set
然後執行,將該着名的字符串(用引號引起來)賦予變量filepath
。然後我們去openxml
。
請注意,\
是Windows中的路徑分隔符; /
是一個開關說明符。
現在 - 如果你想解釋你想做什麼 - 也許輸入一個文件名,可能在目錄結構中的某個地方,如果找到了,然後分配什麼?添加到變量文件路徑。一兩個例子是一個好主意。
這應該得到一個可用的系統。數字檢查不完整,但足夠了。我沒有做它的防彈反對決心打破它的用戶...
@ECHO OFF
SETLOCAL
:again
SET "filepath="
set /p filePath="Please enter filepath as yyyymmdd : "
IF NOT DEFINED filepath GOTO :EOF
if "%filePath%" == "1" goto xmlMenu
:: test to see whether entered data is numeric
SET /a "filepath=%filepath%" 2>nul
IF %filepath%==0 echo invalid entry - numerics only, please&GOTO again
IF %filepath% lss 19800100 GOTO badymd
IF %filepath% gtr 20991231 GOTO badymd
SET filepath=\path\prefix\%filepath:~0,4%\%filepath:~4,2%\%filepath:~6,2%
:: This is just to show the filepath constructed
ECHO filepath is "%filepath%"
IF NOT exist "%filepath%\A\*.xml" ECHO "%filepath%\A\*.xml" does NOT exist&GOTO again
IF NOT exist "%filepath%\B\*.xml" ECHO "%filepath%\B\*.xml" does NOT exist&GOTO again
SET "filepath=%filepath%\B\*.xml"
goto openXML
:badymd
ECHO invalid entry - 4 digits FOR year, 2 FOR month an 2 FOR day, please
GOTO again
:xmlmenu
ECHO AT xmlmenu&GOTO :eof
:openxml
ECHO AT openxml with filepath="%filepath%"&GOTO :eof
GOTO :EOF
顯然,改變路徑前綴,以適應。
對於20140220
的輸入,該路徑將....\2014\02\20
來構造。然後有一個檢查和this +\B\*.xml
- 我只能假設都必須存在才能繼續到openxml
。
感謝您的回覆,我試圖使用通配符的原因是/ */*/*/* /文件夾是與'A'文件夾作爲子目錄特定日期。我需要的只是路徑從用戶輸入中繼承,例如path/to/file/2014/02/18/A/file.xml,然後將其更改爲/b/file.xml – Alex