• 締切済み

テキストファイル内の半角スペースの削除

よろしくお願いします。 OS:Windows Server 2003,Windows 2000 Server MS-DOSコマンドによるバッチで、あるテキストファイル(.txt)内 を検索し、半角スペースがあった場合は半角スペースを 削除するというものを検討中です。 あるテキストファイルには、「Dir /s /a <ディレクトリパス>」(★) の結果が出力されています。 ※http://okwave.jp/qa2630050.htmlの「その他問題点」の  回避手段を考えています。 http://www.fpcu.jp/dosvcmd/bbs/log/cat3/cat54/4-0515.htmlを 参考にし下記のようにバッチを組みましたが、★の結果から 半角スペースを削除した内容になりません。 ------- set infile=%1 set outfile=%2 for /f "delims=" %%A in (%infile%) do call :sub "%%A" goto :eof :sub set STR=%~1 set STR=%STR: =% echo.%STR%>>%outfile% ------- 何がまずいのでしょうか? <DIR>という文字列を含んでおり、"<" や ">" を考慮する 必要がある気はしていますが、どのように修正すればよいか、 なかなかうまくいきません。 修正点やアドバイスをいただけると幸いです。

  • nao-k
  • お礼率92% (695/752)

みんなの回答

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

やる人がいるとは思いたくありませんが, 「2個並んだ空白」が入っているファイル名があったりすると破綻しないかなぁと思いつつ: server の方はわかりませんが, 手元の XP Pro では fc に /W ってオプションがあります.

nao-k
質問者

お礼

アドバイスありがとうございます。 >XP Pro では fc に /W ってオプションがあります.  申し訳ありません。  /W は、使用してみましたが、何も変化しませんでした。

関連するQ&A

  • (UNIX)後ろのスペース出力について

    UNIXのコマンドで、catで読み込んだ行をwhile文でファイルに出力しているのですが、その際に後ろのスペースを消さずに出力するにはどうすれば良いのでしょうか? 以下のような処理を行っています。 cat $infile | read LINE do echo "$LINE" >> $outfile done <$infileの内容> 1 10 100□□□□□□ 2 20 200□□□□□□ ・・・ 以上となります。よろしくお願いします。

  • テキストファイル内の任意の文字列を置換

    ※http://okwave.jp/qa2627431.html を改めさせて頂きます。 よろしくお願いします。 OS: Windows Server 2003(以下W2K3), Windows 2000 Server(以下W2K) MS-DOSコマンドによるバッチで、あるテキストファイル(.txt)内を検索し、 任意の文字列を見つけたら別の文字列に置換する、という ものを検討中です。 ★目的  1)「Dir /s /a <パス>」の結果として出力されるドライブレターを、   例えば全て「D:\」から全て「E:\」へ変更。   (あくまでも「D:\」を置換するのであって「D」のみは考慮しません。)  2) 1) の結果をFCコマンドで比較。   具体的には、W2K 上のあるディレクトリ配下と   W2K3 上のあるディレクトリ配下を比較し相違点を検出したい。 ★その他問題点  W2K と W2k3 での Dirコマンド結果の仕様に違いがあるようです。   →時刻とファイル名、<DIR>とディレクトリ名の間の半角スペース数。    他、気づいていない違いがある可能性もあります。    ※FCコマンドが半角スペース数の違いを検出するようです)  半角スペースの置換で回避を検討中です。 ★参考にしているバッチ  下記ページのsample.batを参考に検討中です。  置換対象文字列以外は何も変えずに実行してもうまく動きません。  例えば、「指定されたファイルが見つかりません」や結果として  出力されるファイル内容がドライブレターを置き換えたものになってい  なかったりします。  http://www.fpcu.jp/dosvcmd/bbs/log/cat3/cat54/2-0391.html どうぞ、アドバイスのほど、宜しくお願い致します。

  • 文字列に半角・全角スペースが入っているかをチェックする関数のおかしな結

    文字列に半角・全角スペースが入っているかをチェックする関数のおかしな結果? 下記コードのように「文字列に半角・全角スペースが入っているかをチェックする関数」を作りました。 $textに入る文字列に半角・全角のスペースが入っているかをチェックします。 -------------------------------------------- my $text = "東 京"; if( isSpace($text) ) {   print "スペースあり"; } else {   print "スペースなし"; } sub isSpace{   my $str = shift || return(undef);   if( $str =~ /.*[\s ]+.*/ ){     return(1);   }else{     return(0);   } } -------------------------------------------- しかしなぜか1行目を my $text = "メ"; とするとスペースが入っているという結果になってしまいます。 なぜ「メ」が入ると半角もしくは全角のスペースとみなされてしまうのでしょうか? また、どうすれば正しくチェックできるようになりますか? よろしくお願いします。

    • ベストアンサー
    • Perl
  • テキストファイル中の文字列を書き換えるスクリプトを書きたい

    テキストファイルの文字列を書き換えるスクリプトを考えています。 今、次のところまで出来るようになりました。本当は「こんにちは」の文字列を全て「HELLO」に置換したいのです。現在は一行の中で最初の「こんにちは」は置換されますが、2番目以降が置換されません。同じ行中の2番目以降も置換するには、どうしたら良いでしょうか? <置換前ファイル:sample.txtの中身> こんにちはこんにちはこんにちはこんにちは こんにちは こんにちは <置換前ファイル:sample.txtの中身> HELLOこんにちはこんにちはこんにちは HELLO HELLO <置換スクリプト> Set fso = CreateObject("Scripting.FileSystemObject") Set regEx = New RegExp Set inFile = fso.OpenTextFile("C:\static\sample.txt") Set outFile = fso.CreateTextFile("C:\static\sample1.txt") regEx.Pattern = "こんにちは" repStr = "HELLO" Do Until inFile.AtEndOfStream tempLine = inFile.ReadLine repLine = regEx.Replace(tempLine, repStr) outFile.WriteLine repLine Loop inFile.Close outFile.Close

  • バッチファイル実行結果が半角スペースが入ってしまう

    PC情報を採取してテキストファイルへ出力するバッチファイルを作成しました。 バッチファイル自体は正常に動作するのですが、テキストに出力されるシリアル情報に半角スペースが入った状態で出力されてしまいます。 半角スペースが入らないようにするためにはどのようにすればよいでしょうか。 (例)本来は「R8X00215」と出力されて欲しいのに、「R 8 X 0 0 2 1 5」と出力されてしまう。 (バッチファイルの中身) set NAME=user echo 【PC名】>C:\Users\%NAME%\desktop\%COMPUTERNAME%.txt hostname>>C:\Users\%NAME%\desktop\%COMPUTERNAME%.txt echo 【シリアル情報】>>C:\Users\%NAME%\desktop\%COMPUTERNAME%.txt wmic bios get serialnumber>>C:\Users\%NAME%\desktop\%COMPUTERNAME%.txt echo 【ipconfig情報】>>C:\Users\%NAME%\desktop\%COMPUTERNAME%.txt ipconfig>>C:\Users\%NAME%\desktop\%COMPUTERNAME%.txt

  • DOSのバッチで、テキストファイル中の文字を置換したい

    いつもお世話になっております。 WindwsXPでDOSバッチを使ってテキストファイル中にある文字列1を文字列2に置換したいのです。 ネットをさまよっていて、こんな例を見つけました。 (参考にしたのはここです。http://www.fpcu.jp/dosvcmd/bbs/log/cat3/cat54/2-0391.html) ====================== @echo off if "%1"=="" goto end set fname=%1 copy %fname% org >nul type nul >%fname% for /f "tokens=1* delims=" %%a in ( org ) do (set line=%%a&& call :sub) del org goto end :sub :この1行下の acb=xyz に置換前と置換後の文字列を指定する。 set l=%line:abc=xyz% echo %l%>>%fname% goto :EOF :end ====================== これをsample.batという名前で保存し、DOSのウィンドウでsample < a.txt と打つと、a.txtファイル中の"abc"が"xyz"に置き換わります。 これに手を入れて置換前と置換後の文字列を可変にしたく思い、sub中に set mae=abc set ato=xyz の2行を加え、変数に値を設定するようにしました。 ところが、次の1行の書き変え方がわかりません。 set l=%line:abc=xyz% を set l=%line:%abc%=%xyz%% のように変えてみましたが、うまく動きません。 どなたかご教授いただけませんか。DOSだけでファイル中の文字列の置換ができればset文を使う使わないにはこだわりません。

  • Cでバイナリデータを変換

    今持っているバイナリファイルfile1.x86をテキストファイルfile1.txtに変換したいんですけどうまくいきません。fopenとfreadでバイナリファイルを読み込むところまで入っていると思うんですけど、テキストファイルとして書き出すことができません。 #include <stdio.h> main() { short a[32000]; FILE *infile, *outfile; infile = fopen("iroha.x86", "r"); outfile = fopen("iroha.dat", "w+"); fread( a, sizeof(short), 32000, infile ); fwrite( a, sizeof(short), 32000, outfile ); fclose(infile); fclose(outfile); } これだとそのまんま出力されるんです。当たり前なんですけど... どこをどう変えればいいか教えてください。 よろしくお願いします。

  • バッチファイル テキスト読込

    バッチファイルの中で、テキストを読み込んで、その中から 10文字分抽出する処理を行いたいのですが、テキストを変数に格納できません。 ヘルプ・ネットも見たのですが、やりかたが悪いのかできてない状況です。 何が悪いのかご教授お願いします。。 ↓ソース set testFile=test.txt For /F "delims=" %%i in (%testFile%) Do ( set readTxt=%%i set str=%readTxt:~10,10% echo %readTxt% echo %str% )

  • 末尾の全角スペースの削除

    SQL Server 2008環境です。 文字列の末尾の空白を一括して削除したくて、以下のようなクエリを書きました。 UPDATE TEST_TABLE SET NAME = REPLACE(RTRIM(REPLACE(StoreBranchName, ' ', ' ')), ' ', ' ') 全角スペースを一度半角スペースにして、RTRIMをかけた後、最後に 半角スペースを全角に直すというものです。 しかし、これだと、元々半角スペースが入っていた場合、そっちまで全角スペースに なってしまうため悩んでおります。 うまいやり方を教えていただけないでしょうか。 宜しくお願いします。

  • IFステートメントで半角でも全角でもtrueとさせ

    IFステートメントで半角でも全角でもtrueとさせるには? Sub test1() Dim str As String str = "ABC"’←全角のA If str Like "*A*" Then ’←半角のA MsgBox "Aがあります" End If End Sub これで、半角Aもメッセージを表示させたいのですが、 マッチバイトみたいなのってありますか?

専門家に質問してみよう