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

コマンドプロンプトで下記の処理がしたいです。

複数のフォルダに同じファイル名(INDEX.txt)が存在しております。

フォルダA
  INDEX.txt
フォルダB
  INDEX.txt
...
フォルダZ
  INDEX.txt

INDEX.txtの中身以下の状態です。
(フォルダBならAの部分がB)

 0001,フォルダA,
 0002,フォルダA,
 ...
 0100,フォルダA,

これに対して一括の処理で下記のように1行目に「0000」を書き加えたいです。

 0000
 0001,フォルダA,
 0002,フォルダA,
 ...
 0100,フォルダA,

どなたか、詳しい方お教え頂ければと思います。
宜しくお願い致します。

A 回答 (3件)

こんにちは。



ここは、Office 系ですから、あくまでも、その範囲で回答しておきます。なお、少し書き換えれば、Excel VBAでも実行可能です。(どちらかというと、そのほうが楽かもしれません)

以下のコードを、メモ帳に貼り付け、ファイル名を、SrchFOLD(任意)、拡張子を、.vbs と付けてください。このプログラムの置き場所は、index.txt ファイルの上にある、上位フォルダにおいてください。すべての下位にあるサブフォルダから、INDEX.TXtファイルをを探して、一行を加える処理をします。

現行では、「0000」と付けるだけですが、当然、「0000,フォルダA, 」というスタイルも可能です。エクスプローラなどから、クリックすればよいです。

なお、質問内容をみると、"0000"は、全角スペースが一つ入っているようですから、" 0000" に書き換えてもよいです。既に、0000と入っているものは、入れないというコードに書き換えることも可能です。

また、コマンドプロンプトの場合は、そのファイルがある場所で、>Wscript.exe srchFOLD として、実行(Enter)させれば、実行されます。
もちろん、MS-DOS ONLY なら、この方法はうまくいきませんし、質問のカテゴリそのものが違うことになります。

'---------------------------------------------------------
'SrchFOLD.vbs
Dim WshShell
Dim CurDir
Dim objFS
Dim objFolders
Dim sbfolder
Dim objFile
Dim objText
Dim myText
Dim i
Const nFILE = "INDEX.TXT"

Set WshShell = CreateObject("WScript.Shell")
CurDir = WshShell.CurrentDirectory

Set objFS = CreateObject("Scripting.FileSystemObject")
Set objFolders = objFS.GetFolder(CurDir)
For Each sbfolder In objFolders.SubFolders
If objFS.FileExists(sbfolder & "\" & nFILE) Then
Set objText = objFS.OpenTextFile(sbfolder.Path & "\" & nFILE)
myText = objText.ReadAll
objText.Close
myText = "0000" & Chr(13) & Chr(10) & myText
Set objText = objFS.CreateTextFile(sbfolder.Path & "\" & nFILE)
objText.Write (myText)
objText.Close
i = i +1
End If
Next

MsgBox i &"個の"& nFILE &" の処理を行いました。"
'---------------------------------------------------------
    • good
    • 0

コマンドプロンプトと言うよりはバッチファイルですね。


(いずれにしても、カテ違いな気がしますが。。)

全てのフォルダが同一フォルダ配下である事を前提として、
親フォルダ直下に以下の2つのバッチファイルを作成するのはいかがでしょうか。
(私もバッチの作成は不慣れなもので、もっと単純な方法がありそうな気がしてなりません。。)

===== [ main.bat ] =====
for %%A in (フォルダA フォルダB フォルダC ... フォルダZ) do call sub.bat %%A
===== [ main.bat ] =====

===== [ sub.bat ] =====
cd %1
echo 0000 > INDEX.temp
type INDEX.txt >> INDEX.temp
del INDEX.txt
ren INDEX.temp INDEX.txt
cd ..
===== [ sub.bat ] =====

これでmain.batを起動すれば、期待通りの結果になるのではと思います。
    • good
    • 0

DOSのことでしょうか。

    • good
    • 0

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