
저는 배치 스크립팅을 처음 접했습니다.
이에 대한 해결책이 있습니다리눅스와 맥OS, 하지만 Windows에는 필요합니다.
다음은 특수 문자에서만 작동하는 !@#$%^&*~ 등입니다. 기본적으로 키보드에서 볼 수 있는 문자입니다. 하지만 Â 및 °와 같은 특수 문자를 제거해야 합니다. 다음 스크립트는 해당 두 특정 문자에서 작동하지 않습니다., cmd를 통해 실행할 수 있는 스크립트입니다. 있다이것하지만 winows7 cmd와 호환되지 않습니다.
@echo off &setlocal
cd /d c:\users\data
for /f "delims=" %%a in ('dir /b /a-d *#*.txt') do (
set "fname=%%~a"
setlocal enabledelayedexpansion
set "nname=!fname:#=!"
ren "!fname!" "!nname!"
endlocal
)
파일 이름에서만 공백을 제거할 수 있는 다음
@echo off
setlocal disableDelayedExpansion
if /i "%~1"=="/R" (
set "forOption=%~1 %2"
set "inPath="
) else (
set "forOption="
if "%~1" neq "" (set "inPath=%~1\") else set "inPath="
)
for %forOption% %%F in ("%inPath%* *") do (
if /i "%~f0" neq "%%~fF" (
set "folder=%%~dpF"
set "file=%%~nxF"
setlocal enableDelayedExpansion
echo ren "!folder!!file!" "!file: =!"
ren "!folder!!file!" "!file: =!"
endlocal
)
)
답변1
스크립트에 코드 페이지 437을 사용해야 한다는 사실을 처리하는 경우 첫 번째 스크립트가 저에게 효과적이었습니다.
아래 스크립트를 메모장에 붙여넣으세요. ANSI 인코딩을 사용하여 test.bat로 저장합니다.
@echo off &setlocal
cd /d c:\users\data
for /f "delims=" %%a in ('dir /b /a-d *ø*.txt') do (
set "fname=%%~a"
setlocal enabledelayedexpansion
set "nname=!fname:ø=!"
ren "!fname!" "!nname!"
endlocal
)
위 스크립트 degree°.txt
의 이름은 degree.txt
.
ø는 유니코드이기 때문에 사용됩니다 U+00F8
. 학위 기호는 0xF8
코드 페이지 437에 있습니다.
 코드 페이지 437에는 나타나지 않으므로 병렬 솔루션을 알지 못합니다. 아마도 필수일 것입니다.이 답변의 지시에 따라 코드 페이지를 변경하십시오.제대로 하려면. 다음은 코드 페이지 변경을 포함하는 배치 파일 시도입니다.
echo Ignore the error displayed below
@echo off &setlocal
chcp 65001>nul
cd /d c:\users\data
for /f "delims=" %%a in ('dir /b /a-d *Â*.txt') do (
set "fname=%%~a"
setlocal enabledelayedexpansion
set "nname=!fname:Â=!"
ren "!fname!" "!nname!"
endlocal
)
위 내용을 메모장 파일에 붙여넣고 UTF-8로 인코딩하여 저장합니다. 배치 파일은 UTF-8 파일을 처음 처리할 때 오류를 발생시키므로 스크립트의 첫 번째 줄을 포함해야 합니다.
답변2
이것에 대한 공로를 인정받고 싶었지만 그것은 제가 우연히 발견한 것이었습니다. 제가 찾은 게시물을 찾을 수 없어서 기억에서 나온 것입니다.
find . -depth -name "*" -print0 | $var -0 sed -i 's/[:cntrl:]/_/g' *
당신은 그것을 조금 가지고 놀아야 할 수도 있습니다. 나는 이것을 게시하는 데 내 프로젝트에서 몇 분 정도 시간을 할애하고 있습니다. 결과를 공유해주세요.