No.2ベストアンサー
- 回答日時:
注意点
文字列にスペースがあると動きません
拡張子の判断はしません
ちゃんと動作確認してません
バッチは得意ではありません
ここを参考にしました:http://d.hatena.ne.jp/jak-san/20090305/1236256670
batと同じディレクトリにあるout.txtに追記します
echo off
for %%a in (%*) do call :sub "%%a"
exit /b
:sub
set fname=%~n1
set n=0
:loop
call set c=%%fname:~%n%,1%%
set /a n=n+1
if "%c%"=="" goto :EOF
if "%c%"=="_" goto break
goto loop
:break
call set cname=%%fname:~%n%%%
set n=0
:eloop
call set c=%%cname:~%n%,1%%
set /a n+=1
if "%c%"=="" goto :EOF
if "%c%"=="_" goto :break2
goto eloop
:break2
set /a n-=1
call set newname=%%cname:~0, %n%%%
echo %newname% >> %~dp0out.txt
goto :EOF
No.5
- 回答日時:
FOR /Fで解析するのは,「ファイル名」を「_」で分離する,という作業です。
あとは,真ん中引っ張ってくればよいので……
@ECHO OFF
REM 環境変数の変更をこのバッチファイル内に留め,拡張機能と遅延展開を有効にする
SETLOCAL ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION
REM 出力ファイル名
SET OUTPUT=%~dpn0.txt
:LOOP
IF "%~1"=="" GOTO :EOF
REM 対象のファイルの拡張子は.txt固定
IF "%~x1"==".txt" (
REM ファイル名を_で分割
FOR /F "delims=_ tokens=1,2,3,4 usebackq" %%A IN (`echo %~n1`) DO (
REM _は2つ,つまり3分割されたはず。4分割以上だったり2分割以下の場合は処理しない
IF "%%~D"=="" (
IF NOT "%%~C"=="" (
REM T1 : 真ん中の部分
SET T1=%%B
REM T2 : T1の最初2文字
SET T2=!T1:~0,2!
REM 出力するのは,最初2文字がkbの場合のみ
IF "!T2!"=="kb" ECHO !T1!>>"%OUTPUT%"
)
)
)
)
REM D&Dされた別のファイルも見るために,SHIFTする
SHIFT
GOTO LOOP
でできあがり。インデント用にU+3000を使っているので,適宜U+0009なりU+0020なりに置き換えて下い。
# U+3000をcmd.exeは空白として通すようですが。
ご回答ありがとうございます。
ファイル名に半角丸括弧が入っていると
動作しないのはどうしようもないのでしょうか?
後出しで大変申し訳ないのですが、
もしご存知でしたらご教示いただけないでしょうか?
No.4
- 回答日時:
no2です、コード間違えました。
ファイル名に空白があるとやっぱり動きません。for %%s in (%*) do call :sub %%s
exit /b
:sub
for /f "usebackq delims==" %%a in ('%*')do call :main %%a
exit /b
:main
set fname=%~n1
set n=0
:loop
call set c=%%fname:~%n%,1%%
set /a n=n+1
if %c%=='' goto :EOF
if %c%==_ goto break
goto loop
:break
call set cname=%%fname:~%n%%%
set n=0
:eloop
call set c=%%cname:~%n%,1%%
set /a n=n+1
if %c%=='' goto :EOF
if %c%==_ goto break2
goto eloop
:break2
set /a n=n-1
call set newname=%%cname:~0,%n%%%
echo %newname% >> "%~dp0out.txt"
goto :EOF
No.3
- 回答日時:
no2です
フォルダ名にスペースがあると動かないようですね。改良版です
私の知識ではスペース以外が原因だと直せません。ていうか原因が特定できません
echo off
FOR /F "usebackq delims==" %%a IN (%*) DO call :side %%a
:sub
set fname=%~n1
set n=0
echo %fname%
:loop
call set c=%%fname:~%n%,1%%
set /a n=n+1
if %c%=='' goto :EOF
if %c%==_ goto break
goto loop
:break
call set cname=%%fname:~%n%%%
set n=0
:eloop
call set c=%%cname:~%n%,1%%
set /a n=n+1
if %c%=='' goto :EOF
if %c%==_ goto :break2
goto eloop
:break2
set /a n=n-1
call set newname=%%cname:~0, %n%%%
echo %newname% >> "%~dp0out.txt"
goto :EOF
繰り返しご回答ありがとうございます。
ファイル名に半角丸括弧が入っていると
動作しないのはどうしようもないのでしょうか?
単一ファイルではfor文の行を消すことで正常動作するのですが、
for文を入れると駄目なので
複数ファイルの処理ができません。
後出しで大変申し訳ないのですが、
もしご存知でしたらご教示いただけないでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) Excelにて、フォルダ内のTextファイルをマクロで統合すると文字化けしてしまう時の解消コード 4 2023/01/01 07:32
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/07/15 15:48
- その他(プログラミング・Web制作) python 気象データの取得 2 2023/06/20 23:54
- Visual Basic(VBA) サブフォルダ(データ)にある複数の.xlsxファイルのSheet3のA2セルの値で01から左側をB2 2 2022/08/14 15:46
- Visual Basic(VBA) 集めたシートのシート名を変更したい。 下記のコードでサブフォルダにあるファイルのSheet3を集めて 6 2022/08/23 10:38
- Visual Basic(VBA) Excel VBAで教えてください 4 2022/05/11 22:20
- Visual Basic(VBA) VBA GetAttrについて教えてください 2 2022/12/22 15:25
- Excel(エクセル) エクセルの数式で教えてください。 3 2022/10/25 10:52
- Visual Basic(VBA) VBAで特定の場所にあるCSVファイル(複数)から特定場所を抜き出してExcelに転記したいです。 11 2023/05/23 16:29
- Java Javaの問題なのですが、「3文字以上の英数字文字列を入力し、文字列の中に文字(9)が出てくるまでの 1 2023/06/06 18:55
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
バッチでテキストファイルから...
-
コマンドプロンプト標準出力と...
-
VBアプリケーションで終了コー...
-
絶対パス名からファイル名を取...
-
DOSバッチでUNIXテキストファイ...
-
バッチファイルでDirで取得した...
-
C#でメジャーなバッチフレーム...
-
コマンドプロンプト画面の閉じ...
-
IPアドレスの第3オクテットだ...
-
Kシェルでgotoのような処理を作...
-
コマンドプロンプトで2ヶ月前3...
-
バッチファイルの環境変数を別...
-
WinMailCmdのバッチファイルに...
-
バッチファイルで昨日の日付を取得
-
バッチファイルで常に最新の現...
-
バッチファイル IF 複数条件方法
-
コマンドプロンプトでファイル...
-
vbscriptでのチェックデジット...
-
DOSのバッチで、テキストファイ...
-
BATのIF文について質問
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
バッチでテキストファイルから...
-
コマンドプロンプト標準出力と...
-
バッチファイルで昨日の日付を取得
-
バッチファイルでDirで取得した...
-
コマンドプロンプトで2ヶ月前3...
-
コマンドプロンプト(バッチファ...
-
絶対パス名からファイル名を取...
-
VBアプリケーションで終了コー...
-
子バッチ内のキー入力処理へ自...
-
コマンドプロンプトでファイル...
-
バッチファイルで常に最新の現...
-
コマンドプロンプト画面の閉じ...
-
コマンドプロンプト(バッチ)...
-
batの変数を直接vbsのプログラ...
-
バッチファイル テキストファイ...
-
呼び出し元バッチを知るには?
-
PowerShellからPowerShellを呼...
-
DOSのバッチで、テキストファイ...
-
telnetの自動シェルバッチを作...
-
Kシェルでgotoのような処理を作...
おすすめ情報