アプリ版:「スタンプのみでお礼する」機能のリリースについて

A.txtとB.txtにはファイル名の一覧が入っています。
両者を比較して、同一ファイル名のみ取り出すバッチは
どのように作成すればよいでしょうか。

例.
C:\>more A.txt
1

C:\>more B.txt
1
2
3

このような状態でA.txtとB.txtを比較して、
両者で同一である1というファイル名のみを取り出したい。

お手数ですが、よろしくお願いします。

A 回答 (3件)

バッチのコードでーす


%~dp0はバッチと同じ場所という意味
VBSより短いぞぉ
――――――――――――――ここから―――――――――――――――
@echo off
setlocal enabledelayedexpansion

set fileA=%~dp0A.txt
set fileB=%~dp0B.txt
set output=%~dp0output_.txt

type nul>"%output%"

rem ファイルAを開く
for /f "usebackq delims=" %%f in ("%fileA%") do (

rem フルパスの場合は%%f
rem ファイル名+拡張子
set fileNameA=%%~nxf

rem ファイルBを開く
call :SubRoutine
)
pause
exit

:SubRoutine
for /f "usebackq delims=" %%g in ("%fileB%") do (

rem フルパスの場合は%%g
rem ファイル名+拡張子
set fileNameB=%%~nxg

if "!fileNameB!"=="%fileNameA%" (
echo "%fileNameA%"
echo "%fileNameA%">>"%output%"
)
)
exit /b
――――――――――――――ここまで―――――――――――――――
以上
    • good
    • 0

あくまで一例。


使い方。コマンドプロンプトで実行。カレントディレクトリはVBSがあるところに移動しておくこと。
CScript FileCompare.vbs C:\A.txt C:\B.txt

***ここから下をコピーして、FileCompare.VBSファイルに保存***
Option Explicit
On Error Resume Next

Dim file1,file2 '入力ファイルパス
Dim objFSO ' FileSystemObject
Dim objFile ' ファイル読み込み用
Dim line '行読取り用

'引数チェック
if WScript.Arguments.Count <> 2 then
WScript.echo("usage: FileCompare.vbs file1 file2")
WScript.Quit(-1)
end if
file1 = WScript.Arguments(0)
file2 = WScript.Arguments(1)

' ArrayListの作成
Dim fileNameArrayList
Set fileNameArrayList = CreateObject("System.Collections.ArrayList")

'file1の各行を読み込み、ArrayListに追加
Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")
If Err.Number = 0 Then
Set objFile = objFSO.OpenTextFile(file1)
If Err.Number = 0 Then
Do While objFile.AtEndOfStream <> True
line = objFile.ReadLine
fileNameArrayList.add line
Loop
objFile.Close
Else
WScript.Echo "ファイルオープンエラー: " & Err.Description
End If
Else
WScript.Echo "エラー: " & Err.Description
End If

Set objFile = Nothing
Set objFSO = Nothing

'file2の各行を読み込み、重複しているかチェックし、重複している場合は出力
Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")
If Err.Number = 0 Then
Set objFile = objFSO.OpenTextFile(file2)
If Err.Number = 0 Then
Do While objFile.AtEndOfStream <> True
line = objFile.ReadLine
If fileNameArrayList.Contains(line) Then
WScript.Echo line
End if
Loop
objFile.Close
Else
WScript.Echo "ファイルオープンエラー: " & Err.Description
End If
Else
WScript.Echo "エラー: " & Err.Description
End If

Set objFile = Nothing
Set objFSO = Nothing
    • good
    • 0
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
できればbatやvbsで自動化したいのですが、、、

なにか案があればお願いします。

お礼日時:2016/06/03 16:30

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!