2009-08-14 126 views
2

我一直工作在後臺從Oracle查詢會從一個位置複製到另一個內容的bat文件,CMD.EXE命令行字符串限制

現在越來越產生的命令是長是的超過255個字符,如

C:> copy x y (where len (x+y) > 255) 

由於這是拋出一個錯誤,有一個變通來管理這種情況,以增加命令長度?

P.S.有些路徑+文件名的長度大於259個字符,我發現這裏有less to argue

回答

4

您可以使用subst來命名您使用驅動器號的兩個子目錄。顯然,這不是真實的,但是邏輯驅動器,但是你可以大大縮短路徑。

LASTDRIVE=Z 
SUBST S: c:\this is a very long path name\source 
SUBST T: d:\this is a very long path name\Target 
#do whatever you need to, like 
copy s:\filename T:\filename 
SUBST S: /D 
SUBST T: /D 

/D參數釋放關聯。

+0

嗨Ralph,您的解決方案工作正常..謝謝....但唯一的問題我所知道的是,任何超過256個字符的東西,命令行都沒有,(我使用的是2000服務器),這會讓解決方案變得更簡單。 – 81967 2009-08-14 13:49:24

0

我不這麼認爲;我會把它寫到一個文件中。

+0

我正在使用bat文件來執行該命令,但它會引發錯誤...「文件名太長」 – 81967 2009-08-14 12:27:42

0

可能不是,聽起來像是碰到了MAX_PATH限制。請參閱MSDN上的File Names, Paths, and Namespaces

可能的解決方法可能是使用短路徑等價物,例如, C:\Progra~1

按照下面的文章,

在運行Microsoft Windows XP或更高版本的計算機,你可以在命令提示符下使用該字符串的最大長度爲8191個字符。在運行Microsoft Windows 2000或Windows NT 4.0的計算機上,可以在命令提示符處使用的最大字符串長度爲2047個字符。

1

您可能要考慮使用DBMS_FILE_TRANSFER.COPY_FILE而不是創建bat文件。你可以避免使用bat文件(這是平臺相關的)。

1
  1. SUBST(已提出)
  2. 使用8.3符號(例如C:\ PROGRA〜1 \ - 也已提出)
  3. 使用此語法(如果你在Windows中運行命令提示符): 拷貝\ \ C:?\ verylongpath \ verylongname \ \ d:\ anotherverylongpath \
1

嘗試使用.cmd文件,而不是一個.bat文件,除非你正在使用的Win95/98/ME。這可以解決整個問題。

如果這樣做不行,可以通過在cmd-escape char ^之前換行來破壞命令,或者將命令包裝在括號中。