2014-02-19 138 views
0

我有一個簡單的腳本,啓動記事本++試圖在Windows批處理腳本

不幸的是一個XML文件路徑有條件地更改文件路徑,對於一些文件生成的文件路徑是不正確的,我想在腳本中進行補償(理想的解決方案顯然是解決路徑問題,但目前這不是一種選擇)。

這裏是我有什麼,對代碼的道歉,我很新的批處理腳本...

set /p filePath= Enter file path: 
if "%filePath%" == "1" goto xmlMenu 
else if "%filePath%" == "file://path/of/file/*/*/*/*/A/*.XML" 
set filePath="file://path/of/file/*/*/*/*/B/*.XML" 
goto openXML 

我想的文件路徑變量從用戶輸入繼承路徑的其餘部分,但目前它明確地設置了通配符的路徑。我已經說明了這種情況的方式似乎也有問題,因爲它似乎將路徑設置爲/B/*.XML,而不管條件如何。

回答

0

有許多錯誤,但正如你所說,你是新的。

首先,如果您輸入的文件路徑是「1」,那麼您應該安全地到達xmlmenu。

下一行會產生錯誤,因爲有一個else子句,

  • 的。如果真指令必須(parenthesised)
  • (必須在相同的物理線路的if
  • 發生
  • 序列) else (必須全部在相同的物理線路(其不需要是一樣的if

在任何情況下,else都是多餘的。如果條件不成立,跳轉將不會發生,因此下一條語句行將被執行。

if ... == ...爲真,如果左邊的字符串與右邊的SRING,因此你需要爲輸入的字符串是絕對相同file://path/of/file/*/*/*/*/A/*.XMLif是真實的。動作陳述也必須與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

+0

感謝您的回覆,我試圖使用通配符的原因是/ */*/*/* /文件夾是與'A'文件夾作爲子目錄特定日期。我需要的只是路徑從用戶輸入中繼承,例如path/to/file/2014/02/18/A/file.xml,然後將其更改爲/b/file.xml – Alex