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

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

新規登録して質問してみよう
ただいま回答率
85.48%
バッチファイル

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

Q&A

3回答

18210閲覧

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

mato072

総合スコア6

バッチファイル

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

0グッド

0クリップ

投稿2015/04/29 05:27

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

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

lang

1@echo off 2for %%f in ( *.txt ) do call :main %%f 3goto :hogehoge 4 5:main 6set input=%~n1%~x1 7set output=tmp\%~n1%~x1 8 9type nul >%output% 10for /f "delims=" %%i in (%input%) do ( 11set "str=%%i" 12call :replace 13) 14exit /b 15 16:replace 17set "str=%str:aaa=bbb%" 18echo %str% >>%output% 19exit /b 20 21:hogehoge 22rem 以降別の処理

以上、よろしくお願いいたします。

気になる質問をクリップする

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

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

投稿2015/06/13 00:09

yaihakiseru

総合スコア12

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

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=」の行のディレクトリを適当に改造してください。
以上

投稿2015/06/13 00:00

yaihakiseru

総合スコア12

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

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

個数が決まっていれば、例えば=が必ず1個なら、

lang

1set X=AAAA=1234 2for /f "tokens=1,2 delims==" %%A in ("%X%") do echo %%A,%%B

のように可能です。

投稿2015/04/29 06:19

otn

総合スコア84557

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問