2

Ant、Java、および CVSNT を使用して、コンソール ウィンドウのコマンド ラインで作業しています。( Windows の世界に住むことを余儀なくされた Unix オタク)

cvsnt コマンドを実行すると、バッチ スクリプトが機能しなくなります。antこれには、やなど、私が使用するいくつかのコマンドが含まれますvim

新しいコンソール ウィンドウを開くことができます。そのウィンドウではすべて問題ありません。したがって、そのコンソール ウィンドウの特定の環境に関する何かである必要があり、cvsnt で何かを行うたびに発生します。

何か案は?私が探しているものはありますか?

4

3 に答える 3

6

今日もまったく同じ問題がありました。問題は、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を呼び出します。このコード ページの動作が発生している理由について誰かがコメントできる場合は、知りたいと思います。

于 2011-06-06T21:18:11.480 に答える
3

CVSNT 2.5.05は、出力コードページを65001(UTF-8)に設定し、元に戻しません。
残念ながら、そのコードページのWindowsの処理は壊れているため、悪いことが起こります(バッチファイルを実行できないことを含む)。

CHCP回避策の1つは、できればコマンドと同じ行を使用して、コードページ(入力と出力の両方)を既知の動作するページ(437、850、1252など)にリセットすることです。CVS例えば:

> 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の場合、バッチファイルの次の行が処理されないことです。

もちろん、バグを修正することはより良い解決策になります。

于 2012-12-13T16:38:20.120 に答える
0

一部のバージョン管理クライアント (ClearCase と話している) は、サブシェルを開始します。これにより、以前の環境が引き継がれる場合とされない場合があります。CC コマンドを含むスクリプトを記述できなかったため、Unix で ClearCase のスクリプトを作成することを断念しました。CC コマンドはサブシェルを開き、親スクリプトは単独で la-la-land に進みます。

于 2011-05-06T16:52:50.720 に答える