質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.60%

  • バッチファイル

    216questions

    バッチファイル(Batch File)は、Windowsのコマンドラインインタープリターによって複数のコマンドを実行させる事が出来るスクリプトファイルです。

バッチを使ったイコールの置換

受付中

回答 3

投稿

  • 評価
  • クリップ 0
  • VIEW 6,125

mato072

score 1

以下、
「aaa」→「bbb」の置換をおこなっている箇所で、
「=」→「,」左記のイコール記号を別の記号に置換を行いたい。
何か方法はありますでしょうか。
アドバイスいただけたら幸いです。

▼下記バッチの内容
拡張子が「.txt」のファイルを読み込んだ際に、
テキスト内の「aaa」文字列を「bbb」に置き換え、
元のファイル名で「tmp」フォルダに保存する。


@echo off
for %%f in ( *.txt ) do call :main %%f
goto :hogehoge

:main
set input=%~n1%~x1
set output=tmp\%~n1%~x1

type nul >%output%
for /f "delims=" %%i in (%input%) do (
set "str=%%i"
call :replace
)
exit /b

:replace
set "str=%str:aaa=bbb%"
echo %str% >>%output%
exit /b

:hogehoge
rem 以降別の処理

以上、よろしくお願いいたします。
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 3

0

バッチスクリプトだけで、=の置換は出来ません。
VBScriptを使うなどが必要です。

個数が決まっていれば、例えば=が必ず1個なら、
set X=AAAA=1234
for /f "tokens=1,2 delims==" %%A in ("%X%") do echo %%A,%%B
のように可能です。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

下記コードで可能。
長くなりましたが、wordlengthからは自作の擬似的な関数みたいなもんですので、あんまりきにしなくていいです。

やってることとしては、一文字ずつ見て行き、「=」であれば除去、といった風です。
処理速度はあれですが、こちらはotn様の回答と違い、複数の=も削除できます。
まぁ参考までに。

―――――――――――ここから―――――――――――
@echo off
setlocal enabledelayedexpansion

@echo off

rem テキストファイルを保存しているフォルダ名。最後の[\]まで入れるように。
set workDi=%~dp0test\

pushd %workDi%

for /f "usebackq delims=" %%f in (dir /b /a-d *.txt) do (call :main %%f)
pause
exit

:main
set input=%workDi%%~nx1
set outDi=%workDi%tmp\

if not exist "%outDi%" (mkdir "%outDi%")
set output=%outDi%%~n1%~x1

echo %input%
echo %output%
echo ------

type nul >%output%
for /f "usebackq delims=" %%i in ("%input%") do (
set str=%%i
call :replace
)
exit /b

:replace

rem 文字列長を計算して変数に入れるので、一行の文字数が固定であれば、「call~」と:wordLengthからの部分を削除して、
rem strLenに子丁重長さを入れてください。
call :wordLength "%str%
set strLen=%wordLength_Cnt%

rem echo 文字列長:%strLen%

set strBuf=
for /l %%l in (0,1,%strLen%) do (
    set /a num=%%l
    call set buf=%%str:~!!num!!,1%%
    if "!buf!"=="=" (
        set /a disp=!num!+1
        echo 文字列中!disp!文字目に=が検出されました。除去します
    ) else (
        set strBuf=!strBuf!!buf!
    )
)
echo !strBuf! >>%output%
exit /b


exit

:wordLength
rem 引数取得
set wordLength_ArgWord=%1
set wordLength_ArgWord=%wordLength_ArgWord:"=%

set wordLength_Line=%wordLength_ArgWord%
call :wordLength_Sub "%wordLength_ArgWord%"
rem echo  カウント対象文字  : "%wordLength_ArgWord%"
rem echo ■■■  文字数 : "%wordLength_Cnt%"
exit /b

:wordLength_Sub
set /a wordLength_Cnt=0

:wordLength_SubLoop
if "%wordLength_Line%"=="" (exit /b)
set /a wordLength_Cnt+=1
set wordLength_Line=%wordLength_Line:~1%
goto wordLength_SubLoop
―――――――――――ここまで―――――――――――
あと、作業するディレクトリなんかは私好みにいじくったので、
その辺は「set workDi=」の行のディレクトリを適当に改造してください。
以上

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

2件目回答者ですが、
(dir /b /a-d *.txt)
がサイトの仕様なのか、ピンクの字でこのように、
(dir /b /a-d *.txt)
強調表示されていると思います。
実際にはグレイヴ・アクセント ( ` ) で「dir /b /a-d *.txt」を囲っていますので、上記コードを使用する際には、囲むように修正をお願いします


投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.60%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • バッチファイル

    216questions

    バッチファイル(Batch File)は、Windowsのコマンドラインインタープリターによって複数のコマンドを実行させる事が出来るスクリプトファイルです。