2016-10-06 11 views
2

ディレクトリc:\ testには、ファイル名PM1 2016-10-06が自動的に入力されます。1.AL1、PM1 2016-10-06 2.AL1 、PM1 2016-10-07 1.AL1など私は書いた(コアコードのためにAaciniのおかげです!)私はそれが必要な方法で正確に動作するバッチスクリプトですが、私の問題は、 1つのファイルであり、そのファイルはファイル名にスペースを含むことはできません。コード:ファイル名にスペースを含む複数のファイルを一括して変更する

@echo off 

cd c:\test 

setlocal EnableDelayedExpansion 

set LF=^ 

%do not remove% 
%these lines% 

set "EOL=!LF!" & set "EOL2=!LF!" 

for /f "tokens=*" %%a in (c:\test\PM1.AL1) do (
    if %%a equ PROP-SUMMARY set "EOL=!LF!" 
    set /P "=%%a!EOL!" < NUL 
    set "EOL0=!EOL!" & set "EOL=!EOL2!" & set "EOL2=!EOL0!" 
    if %%a equ PROP-VALUES set "EOL=," 
) >>c:\test\test.tmp 
TYPE c:\test\test.tmp | FIND "" /V > c:\test\PM1_new.AL1" 

DEL c:\test\test.tmp 

TYPE行が不明な場合は、ファイル内のすべてのCRがCRLFに変更されます。

+1

タイトルには、複数のファイルで作業する必要があると書かれていますが、どのファイルを決定しますか?ディレクトリ内のすべてのファイルを処理する必要がありますか? – CGritton

+0

ディレクトリ内のすべてのファイル – RyCar66

+0

具体的に何が変更される必要があるかを示す情報はありません。通常、入力と出力**の例を提供するのに役立ちます。 – Squashman

答えて

1
@echo off 
setlocal EnableDelayedExpansion 

cd c:\test 

set LF=^ 
%do not remove% 
%these lines% 

for %%f in (*.*) do (

    set "EOL=!LF!" & set "EOL2=!LF!" 

    (for /f "usebackq tokens=*" %%a in ("%%f") do (
     if %%a equ PROP-SUMMARY set "EOL=!LF!" 
     set /P "=%%a!EOL!" 
     set "EOL0=!EOL!" & set "EOL=!EOL2!" & set "EOL2=!EOL0!" 
     if %%a equ PROP-VALUES set "EOL=," 
    )) <NUL> test.tmp 

    TYPE test.tmp | FIND "" /V > "%%f" 

) 

DEL test.tmp 
+0

それは完璧な私の友人です。あなたのWindowsコマンドラインのあなたの熟練はうらやましいです。私が行った唯一の変更は、最後のかっこの上にDEL test.tmpを移動したことです。ありがとうございました! – RyCar66

+0

これはファイルの名前を変更しますか? – CGritton

+0

はい、元の質問をチェックしてください:http://stackoverflow.com/questions/39798675/i-want-to-replace-carriage-returns-with-commas-in-batch – RyCar66

関連する問題