我正在使用Ant,Java和CVSNT在控制檯窗口中的命令行上工作。 (Unix極客被迫生活在Windows世界)批處理腳本不再有效?
當我運行cvsnt命令時,批處理腳本不再工作。這包括我使用的幾個命令,包括ant
和vim
。
我可以開闢一個新的控制檯窗口,在該窗口中,一切都很好,所以它必須是一些有關在控制檯窗口中特定的環境中,每當我在做什麼CVSNT它發生。
任何想法?任何我應該尋找的東西?
我正在使用Ant,Java和CVSNT在控制檯窗口中的命令行上工作。 (Unix極客被迫生活在Windows世界)批處理腳本不再有效?
當我運行cvsnt命令時,批處理腳本不再工作。這包括我使用的幾個命令,包括ant
和vim
。
我可以開闢一個新的控制檯窗口,在該窗口中,一切都很好,所以它必須是一些有關在控制檯窗口中特定的環境中,每當我在做什麼CVSNT它發生。
任何想法?任何我應該尋找的東西?
今天我有完全相同的問題。問題在於cvs.exe在代碼頁上做了些什麼。我無法解釋什麼,但如果你重置代碼頁,bat文件再次開始工作。
一個例子可以說明清楚(在英國是,我的默認代碼頁是850,但同樣的事情發生時,我有我的Windows默認爲437)
>echo @echo .bat files are working > test.bat
>test.bat
.bat files are working
>chcp
Active code page: 850
>cvs update
? test.bat
cvs update: Updating .
>test.bat
>chcp
Active code page: 850
>test.bat
>chcp 850
Active code page: 850
>test.bat
.bat files are working
>
所以雖然代碼頁顯然不受影響,重置它會恢復.bat文件的功能。通過它
@echo off
(
chcp 850 > NUL
"C:\Program Files\CVSNT\cvs.exe" %*
chcp 850 > NUL
)
和調用CVS:
要解決這個問題,所以我使用的是這樣的腳本。如果任何人都可以評論爲什麼這個代碼頁行爲正在發生,我會很有興趣知道。
感謝您的信息!做'chcp 437'確實解決了它。我會像你說的那樣修改這個批處理腳本來解決這個問題。 – 2011-06-06 21:35:05
我旁邊的那個人剛剛遇到了同樣的問題 - 他將其包裝到perl腳本中,但這似乎也起作用。 – rutgersmike 2012-11-07 21:23:45
某些版本控制客戶端(我跟你說話的ClearCase)啓動子殼可能會或可能不會與它帶來的以前的環境了。我們放棄了試圖在Unix上編寫ClearCase的腳本,因爲我們無法在其中編寫帶有CC命令的腳本,因爲他們打開了一個子shell,並且父腳本會自行繼續寫入la-la-land。
'不是一個子殼。如果我輸入「退出」,我的控制檯就會再見。我也運行'set'並查看所有定義的環境變量。正如我所說的,除了批處理命令之外的所有命令都能正常工作不幸的是,'ant'和'vim'(我最需要的兩個)將不起作用。 – 2011-05-06 17:06:39
嘗試從失敗的命令中捕獲返回值,然後顯式地將其返回。嘗試爲所述命令定義一個別名,該別名指向一個只響應'cmd執行'的批處理文件,以便您知道CVSNT實際上是在嘗試執行該命令。 – 2011-05-06 17:57:29
CVSNT 2.5.05將輸出代碼頁設置爲65001(UTF-8)並且不會將其設置回。
不幸的是,Windows對該代碼頁的處理被破壞,所以發生了不好的事情(包括無法運行批處理文件)。
一個解決方法是在代碼頁(輸入和輸出)重置爲已知使用CHCP
,優選在作爲CVS
命令同一行工作酮(437,850,1252或其他)。例如:
> cvs update & chcp 1252
或者,如果您覺得更花哨,可以實際保存當前代碼頁並將其恢復。
例如,下面是我用它來更新所有的模塊在我的工作目錄的批處理文件:
@echo off
setlocal enableextensions
for /f "tokens=4" %%i in ('chcp') do set hack=chcp %%i
for /d %%i in (*) do (
if exist %%i\cvs (
echo.
echo *** updating %%i
pushd %%i
cvs -q update -A -P -d | find /V "?" & %hack% >NUL
popd
))
echo.
echo *** STATUS ***
cvs -q status -q | find /V "?" & %hack% >NUL
endlocal
pause
在同一行調用CHCP的重要性是批處理文件的下一行不會如果代碼頁是UTF,則進行處理。
當然,修復該錯誤將是一個更好的解決方案。
感謝您解釋爲什麼CVSNT導致此問題。然而,這個問題在2年半前被問及和回答,所以我不能給你答案。我會+1你mod。最後,我從CVSNT(其中包括許多其他問題,包括一件pesterware)切換到Subversion。 – 2012-12-13 19:05:36
有些人在獲取這些問題時仍然使用CVSNT並進行搜索(我知道我是這麼做的),所以我希望它能幫助某人。 乾杯。 – 2012-12-13 20:19:14
我鍵入命令「VIM」和VIM不上來。它只是給我一個命令行提示符。與「螞蟻」一樣。 Perl腳本雖然可以工作,但我有一個'whence.pl'腳本可以運行,它顯示了文件所在路徑中的哪個目錄。我可以看到vim是'C:\ Windows \ vim.BAT'。出於某種原因,該命令不運行,我只是得到一個新的提示。 – 2011-05-06 16:49:48
'C:\ Windows \ vim.BAT'包含什麼?只包含'echo hello world'的簡單'test.bat'文件是否也無法執行任何操作? 'test.bat'文件在當前目錄還是通過搜索'PATH'找到它有什麼關係? – 2011-05-06 17:42:29
是的,一個簡單的test.bat也失敗了。當我運行「cvs up」或「cvs commit」時會發生這種情況。 – 2011-05-06 17:49:01