2016-06-01 5 views
0

非常に特殊な記号( ')とIのテキストファイルのチェックを挿入するコマンドを作成する必要があります問題があります。それは一重引用符であり、時にはいくつかのフォルダでzipされる必要があります。バッチジッパーがその名前のシンボルを持つフォルダに出会うと、問題が発生して奇妙なファイルが作成されます。私は細部までは詳しくは触れていませんが、テキストファイルにシンボル( ')が含まれているかどうかを(単純に)確認する必要があります。エラー行にスクリプトを送信します"エコーエラーが見つかりました"のようなシンボルが見つかりました)。そして、そうでない場合には、ちょうどFINDSTRのように...スクリプトの残りの部分に特定のシンボルのテキストファイルをバッチで検索し、結果に応じてスクリプトを変更する方法

それを送る「」」であれば dirlist.txtたのgoto errは、他のgoto再開 私はそれが非常に間違っている知っているが、あなたのアイデアを得ます。

findstr /i /c:"’" C:\ACFZ\FORZIP\dirlist.txt >2 
if %errorlevel% EQU 0 (goto LABEL0) else (goto LABEL1) 

:LABEL0 
msg %username& "An invalid symbol has been found. Remove any single quotation marks (’) from the folder names and try again. If unsure, simply remove anything that looks like an apostrophe." 
pause 
goto ERROR 

:LABEL1 
echo No errors found, continuing 
pause 
goto ZIPSTART 

:ERROR 
echo an error was found, exiting... 
pause 
goto EXIT 

それは、常にファイルがそれでシンボルを持っているにもかかわらず、エラーを言っていない終わる:ここ

は、私がこれまで持っていると私はまだそれが動作するようになって何も進展していないものです。ここで

は私が(dirlistに)を検索する必要があるテキストファイルです

2082708 Amboy Bank 
2082712 Cavender’s 
2082736 Elizabeth Board of Education 
2082763 Tri-Valley Developmental Services LLC 
2082773 Vector Management 
+0

ファイルへのパスが正しいことを確認し、思ったとおりの内容であることを確認してください。あなたのコードはうまくいくはずですが、あまりにも多くのGOTOステートメントは必要ありません。また、 '> 2'は間違っています。代わりに、 '> nul 2> nul'のようなものが欲しいと思っていますが、それはあなたが述べた問題とは関係ありません。 – dbenham

答えて

0

%のerror_level%の間違った引数に渡さない限り、例えばなしではfindstr実行してみてください((0)は常に成功した実行のステータスを示します引数または間違ったファイル名で)。

あなたの場合、findstrの出力(画面に表示されるメッセージ)を調べる必要があります。 1つの方法は、findstrが検索に一致する文字列を見つけられなかった場合、画面に何も表示されないという事実に頼ることです。たとえば、次のように

set found="" 
findstr "'" C:\ACFZ\FORZIP\dirlist.txt > findresult.txt 
call:CheckEmptyFile findresult.txt found 
if "%found%" EQU "FOUND" (
    echo An invalid symbol has been found 
) else (
    echo No errors found, continuing 
) 

REM your execution goes here 

REM Clean up 
del findresult.txt 
goto :eof 

:CheckEmptyFile 
if %~z1 == 0 (
    set "%~2=NOTFOUND" 
) else (
    set "%~2=FOUND" 
) 
goto :eof 

(参考:Windows BAT : test if a specific file is empty

1

OK、私はついにそれが正しく動作してしまった...ハーヴェイのおかげで、私はその後、別のファイルに任意の結果を出力する方法を使用し、そのファイルの内容を確認します。問題が見つかった場合は問題のフォルダの完全な名前が表示され、簡単に修正できるので実際にはうまくいきます。ここで

は、作業部の抜粋です:

findstr "'" C:\ACFZ\FORZIP\dirlist.txt > error.txt 
findstr "." error.txt >nul 
    IF %ERRORLEVEL% EQU 0 GOTO POPUP 
    IF %ERRORLEVEL% EQU 1 GOTO ALLCLEAR 

と、ここではもう少し詳細にある:私はこの問題を解決することができました

CD C:\ACFZ\FORZIP 
DIR /AD /B /ON >dirlist.txt 

Echo Checking for errors in folder names... 
ping -n 3 localhost >nul 

REM that is not an apostrophe! 
findstr "'" C:\ACFZ\FORZIP\dirlist.txt > error.txt 
findstr "." error.txt >nul 
    IF %ERRORLEVEL% EQU 0 GOTO POPUP 
    IF %ERRORLEVEL% EQU 1 GOTO ALLCLEAR 

REM Errorlevel 0= Something found, 1= nothing found 

:POPUP 
color cf 
msg %username% "An invalid symbol has been found. Remove any single quotation marks (’) from the folder names and try again. If unsure, simply remove anything that looks like an apostrophe." 
goto ERROR 

:ALLCLEAR 
echo No errors found, continuing... 
ping -n 3 localhost >nul 
ping -n 3 localhost >nul 
goto ZIPSTART 


:ERROR 
echo An error was found in the following folder name(s) below:^ 


findstr "." error.txt 

echo. 
Echo Remove any symbols from the above folder name(s) 
echo within your completed folder and try again. 
Echo This program will now exit. 
pause 
goto EXIT 


:ZIPSTART 
REM Zip contents of each directory 
for /f "tokens=*" %%a in (dirlist.txt) do (
    CD "%%a" 
    wzzip "C:\ACFZ\ZIPPED\%%a.zip" 
    CD.. 
) 

うれしいです。私はWinZipがその引用符から本当に狂っていると思う。私がこれを必要としたのは、私が仕事でジッパーとバックアッププロセスを自動化するために、このバッチスクリプトを書いたことです。月のジョブは圧縮され、アーカイブのためにサーバーにコピーされます。手動で行うのは苦痛だったので、これですべてを1ステップで行うことができます。

エラーレベルの問題は正しく入力されなかったことです。私はそれらを右に置いていませんでした。

お手数をおかけしていただきありがとうございます。

関連する問題