見出し画像

(AI問答)batファイル。以下の記述で合っているか? "編集中のエクセルファイルをスキップ"echo *$*.*x* > ".gitignore"

A1. OpenAI (chatGPT3.5)

このバッチファイルの目的が「編集中のエクセルファイルをスキップ」である場合、`echo $.x > ".gitignore"` は誤ったコマンドです。`echo` コマンドはファイルを作成するわけではなく、コンソールにテキストを表示します。また、このコマンド自体はエクセルファイルをスキップするためのものではありません。

エクセルの編集中のファイルをスキップするためには、一般的にはロックファイルが使用されます。ロックファイルは通常、エクセルファイルが編集中であることを示すために置かれる空のファイルです。次に、バッチファイルがそのロックファイルの存在を確認し、存在する場合はスキップするようにします。

以下は、そのための簡単な例です(ファイルの拡張子やロックファイルの名前は必要に応じて変更してください):

@echo off
set LockFileName=edit.lock

for %%i in (*.xlsx) do (
    if not exist "%%~ni_%LockFileName%" (
        rem ロックファイルが存在しない場合の処理
        rem ここに実際に行いたい操作を記述
        echo Processing file: %%i
        rem 例: copy "%%i" "destination\"
        
        rem ロックファイルを作成してエクセルファイルが編集中であることを示す
        type nul > "%%~ni_%LockFileName%"
    ) else (
        echo Skipping file (being edited): %%i
    )
)

この例では、拡張子が `.xlsx` のエクセルファイルを処理します。各エクセルファイルに対して、対応するロックファイルが存在しない場合に処理を行い、ロックファイルを作成します。存在する場合はスキップします。

A2. Google Gemini (旧名 Bard)

はい、記述は合っていますが、いくつか注意点があります。

1. ファイル名の拡張子:

*$*.*x* は、すべてのファイル名にマッチします。これは、編集中のエクセルファイルだけでなく、他のファイルもスキップしてしまう可能性があります。

2. ワイルドカードの解釈:

* は、任意の文字列にマッチします。.*x* は、"." で始まり、任意の文字が 0 文字以上続き、".x" で終わるファイル名にマッチします。

3. 具体的なファイル名の除外:

特定のファイル名を除外したい場合は、echo "filename.xlsx" >> ".gitignore" のように、ファイル名を直接記述する必要があります。

4. コメントの追加:

gitignore ファイルには、コメントを追加することができます。コメントは、# から始まる行で記述します。コメントは、コードを理解しやすくするために役立ちます。

5. サンプルコード:

以下は、編集中のエクセルファイルをスキップするためのサンプルコードです。

# 編集中のエクセルファイルをスキップ
echo "*.xlsx" >> ".gitignore"

# 特定のファイル名を除外
echo "Book1.xlsx" >> ".gitignore"

# コメント
# このファイルは、編集中のエクセルファイルをスキップするために使用されます。

参考資料:

注意:

上記の情報は参考用であり、最新の情報ではない可能性があります。詳細は、Git の公式ドキュメントを参照してください。

A3. MS Copilot (旧名 BingAI)

このバッチファイルの目的は、編集中のエクセルファイルをスキップすることですね。以下の記述を見直しましょう。

@ECHO OFF
REM -------------------------------
REM ファイルパスを設定
REM -------------------------------
SET Folder=\\****\\****\\****\\****\\
SET File=サンプル.xlsx

REM -------------------------------
REM カレントフォルダを変更
REM -------------------------------
CD /d C:%Folder%

REM -------------------------------
REM VBSファイル作成
REM -------------------------------
SET vbsFile=vbsFile.vbs

REM Excelオブジェクト設定
ECHO Dim objExcel > %vbsFile%
ECHO Dim objWorkbook >> %vbsFile%
ECHO Dim objSheet >> %vbsFile%
ECHO Set objExcel = CreateObject("Excel.Application") >> %vbsFile%
ECHO Set objWorkbook = objExcel.Workbooks.Open("%Folder%\%File%") >> %vbsFile%
ECHO Set objSheet = objWorkbook.Sheets(1) >> %vbsFile%

REM A2セルを読み取って変数Day1へ代入
ECHO Dim Day1 >> %vbsFile%
ECHO Day1 = objSheet.Range("A2").Value >> %vbsFile%

REM Excelオブジェクト終了
ECHO objWorkbook.Close >> %vbsFile%
ECHO objExcel.Quit >> %vbsFile%
ECHO Set objSheet = Nothing >> %vbsFile%
ECHO Set objWorkSheet = Nothing >> %vbsFile%
ECHO Set objExcel = Nothing >> %vbsFile%

REM 変数Day1の1日前を変数Day2へ代入
ECHO Dim Day2 >> %vbsFile%
ECHO Day2 = DateAdd("d", -1, Day1) >> %vbsFile%

REM 変数Day2が、未来の日付か過去の日付かチェック
ECHO Dim Flag >> %vbsFile%
ECHO Flag = "未来" >> %vbsFile%
ECHO If DateDiff("d", Now, Day2) ^< 0 Then >> %vbsFile%
ECHO     Flag = "過去" >> %vbsFile%
ECHO ElseIf DateDiff("d", Now, Day2) = 0 Then >> %vbsFile%
ECHO     Flag = "現在" >> %vbsFile%
ECHO End If >> %vbsFile%

REM CMDへパラメータを渡すためテキスト出力
ECHO Dim fso >> %vbsFile%
ECHO Dim Fpath >> %vbsFile%
ECHO Set fso = CreateObject("Scripting.FileSystemObject") >> %vbsFile%
ECHO Fpath = fso.getParentFoldername(WScript.ScriptFullName) >> %vbsFile%
ECHO With fso.CreateTextFile(Fpath ^& "\一時ファイル.txt") >> %vbsFile%
ECHO     .WriteLine Day2 ^& "," ^& Day1 ^& "," ^& Flag >> %vbsFile%
ECHO     .Close >> %vbsFile%
ECHO End With >> %vbsFile%
ECHO Set fso = Nothing >> %vbsFile%

REM -------------------------------
REM VBSファイル実行&削除
REM -------------------------------
Cscript %vbsFile%
DEL %vbsFile%

REM -------------------------------
REM テキストファイルを読み込んで変数へ代入&テキストファイル削除
REM -------------------------------
FOR /f "tokens=1,2,3* delims=," %%a IN (一時ファイル.txt) DO (
    SET Remind=%%a
    SET CellA2=%%b
    SET Flag=%%c
)

DEL 一時ファイル.txt

ECHO 「%File%」を読み込みました。
ECHO 読み取った日付は………………………………………%CellA2%
ECHO リマインド予定日(読み取った日付の前日)は……%Remind%
ECHO 判定結果…………………………………………………%Flag%

IF %Flag% EQU 現在 (
    ECHO リマインド予定日が当日のため、予約設定ができません。
    ECHO 未来の日付

結論

#Qiita #はてなブログ などからのコピペしている可能性が微レ存?
特にOpenAIは一旦英語に翻訳して、推論後に日本語に再翻訳しているのが以前は顕著だったため。
インターネット上でもっとも使われている人口が多い英語(English)のネット掲示板から拾ってきた文言も含まれていそうだ。


この記事が参加している募集

仕事について話そう

ビットコイン普及して欲しいですね