>source

폴더 안의 파일 이름을 바꾸는 배치 파일을 만들려고합니다. 각각은 동일한 이름 형식을 갖습니다 : car error file (1).txt .

제목에서 공백을 어떻게 제거합니까? 각 파일의 모든 공백, 탭 및 유사 문자를 바꾸고 유쾌한 문자 ( | )로 바꿔야합니다. ) 각 파일에서 문자열을 가져올 수 있습니다.

내가 가지고있는 오류는 배치 파일이 이름이 car 인 파일을 찾으려고한다는 것입니다.  분명히 존재하지 않습니다.

old  이름은 나중에 저장하지 않아도되므로 모두 car1, car2 등으로 불릴 수 있습니다.

@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
SET dir=C:\Users\betacom\Desktop\file\pat\SEMPREALAMENTARSEOH\
echo.>Output.csv
for /f %%f in ('dir /b %dir%*.txt') do (
    ::rename %%f "something.txt"
)
for /f %%f in ('dir /b %dir%*.txt') do (
    for /f "delims=" %%a in ('findstr \.edi %dir%%%f') do echo(%%a;;%%f)>>Output.csv
::after this row above will be:
    REM for /f "tokens=2 delims=|" %%a in ('findstr \.edi %dir%%%f') do echo(%%a;;%%f)>>%dir%Output.csv
)

현재 파일 이름 :

car error file (1).txt
car error file (2).txt ...

필요한 것들 :

car1.txt
car2.txt ...


  • 답변 # 1

    @ECHO Off
    SETLOCAL
    SET "sourcedir=U:\sourcedir"
    :again
    SET /a processed=0
    FOR /f "delims=" %%a IN ( 'dir /b /a-d "%sourcedir%\*car*" ' ) DO (
     rem for each filename matching mask...
     FOR /f "tokens=1*delims=() " %%p IN ("%%a") DO IF "%%q" neq "" (
      rem here for filenames containing at least 1 of the delimiter set to be eliminated
      rem try to create a new filename containing not-banned characters
      SET /a processed+=1
      SET "changedthisname="
      FOR %%r IN ("" _ $ x q j %random%) DO IF NOT DEFINED changedthisname (
       IF NOT EXIST "%sourcedir%\%%p%%~r%%q" REN "%sourcedir%\%%a" "%%p%%~r%%q"&SET "changedthisname=y"
      )
     )
    )
    ECHO namechange attempts=%processed%%
    IF %processed% gtr 0 GOTO again
    GOTO :EOF
    
    

    sourcedir 의 설정을 변경해야합니다  상황에 맞게 이 목록은 내 시스템에 맞는 설정을 사용합니다.

    삭제하려는 문자가 포함되어 있지 않으면 새 파일 이름에 신경 쓰지 않는 것처럼 보이기 때문에 아마도 작업을 수행하게 될 것입니다.

    외부 루프는 car 를 포함하는 파일 이름을 찾습니다.  전체 이름을 %%a 에 할당합니다 .

    다음 루프는 이름을 분석하고 두 부분으로 나눕니다-원치 않는 문자 앞뒤에있는 부분 ( delims= 에서 설정) ). 파일 이름에 원하지 않는 문자가 없으면 %%q 에서 파일 이름의 두 번째 부분  비어있을 것이므로 무시해도됩니다. 그렇지 않으면 허용되지 않는 문자를 다른 허용 문자로 대체하려고합니다. 나는 "" 를 선택했다  (빈 문자열-그냥 문자를 버리십시오), _ $ x q j  (드문 경우) 또는 임의의 숫자입니다. 와이즈 비즈  프로세스가 동일한 파일의 여러 이름 바꾸기를 시도하지 않도록 파일 이름이 바뀌 었는지 여부를 추적합니다.

    changedthisname  패스에 원치 않는 문자가 포함 된 파일 이름을 계산하므로 패스가 끝날 때 찾지 못한 경우 완료됩니다.

    processed 와 같은 파일 이름   car error file (1).txt 사용   ()[space] 의 구분자로   %%p 에 이름을 처리 할 수 ​​있습니다  첫 번째 패스에서 car$error file (1).txt car$error_file (1).txt  셋째와 car$error_filej1).txt 에  네 번째에.

    좋아요-이름 변경 부분은 약간 복잡해서 car$error_filej19162.txt 로 설득 될 수 있습니다 + 임의의 숫자-그러나 컴퓨터는 복잡하고 단순한 임의의 숫자는 재미가 없을 것입니다.

  • 답변 # 2

    요청한대로 :

    car
    
    

    무엇을 이루려고하는지 정확히 알지 못한 채 @echo off set "dir=C:\Users\betacom\Desktop\file\pat\SEMPREALAMENTARSEOH" setlocal enabledelayedexpansion for /f %%A in ('dir /b %dir%\*.txt') do ( rename "%%A" "%%~nA something.txt" set "var=%%~nxA" for /f "delims=" %%B in ('findstr \.edi %dir%\!var!') do ( echo(%%B;;%%A)>>Output.csv echo(%%B;;%%A)>>%dir%\Output.csv ) ) 를 재구성했습니다.  좀 더 이해하기 위해 루프. 예를 들어, 동일한 for 를 가진 별도의 루프가 필요하지 않습니다.  당신이 바꿀 때 옵션은 for 입니다  명령-그래서 루프를 중첩하고 여러 개의 do 를 추가했습니다.  해당되는 경우 라인.

    do 로 시작하면 논리를 따르는 것이 더 쉬운 방법을 보여주기 위해 개인 취향에 따라 몇 가지 사항을 변경했습니다.  새로운 매개 변수 ( %%A )를 도입 할 때 알파벳을 순차적으로 통과합니다. %%A %%B 등)-당신이 %%C 를 알고있는 방식  돌아가서 아무것도 볼 필요없이 두 번째/중첩 된 매개 변수입니다. 매개 변수의 일부는 매개 변수 확장자와 연관되므로 매개 변수에서 소문자를 사용하지 않는 것이 좋습니다.

    코멘트에서 언급했듯이- %%B 이외의 명령에서 변수를 처리 할 때마다  그리고 다른 상황), 당신은 거의 항상 따옴표 안에 그것들을 원할 것이므로 잠재적 인 공간은 당신을 버리지 않을 것입니다. 변수가 개별 명령 또는 일괄 처리로 이스케이프해야하는 특수 문자를 상속하는 경우 다른 위치에서 변수를 사용하기 전에 해당 문자를 처리해야합니다.

    참조 : For, 매개 변수/인수, 따옴표, 이스케이프 문자, 구분 기호

    echo

관련 자료

  • 이전 android - 드롭 된 이미지를 수정하여 비트 맵에서 위치를 변경하고 비트 맵을 저장하는 방법
  • 다음 python - 입력 문을 선택적으로 만드는 방법?