문제

어떤 이유로 어떤 이유로 아래 코드는 배치 파일이 경로를 지정하더라도 이름을 바꿀 파일과 동일한 폴더에있는 경우에만 작동합니다. 배치 파일이 다른 폴더에 있으면 파일을 찾을 수 없다는 오류가 발생합니다. 이것에 대한 입력이 있습니까?

@echo off&setlocal
set "name1=Bart"
set "name2=Carl"
set "name3=Judy"
for /f "delims=" %%a in ('dir C:\Users\%username%\Downloads\Export_*.csv /b /a-d /o-d') do (
    set "fname=%%~a"
    set /a counter+=1
    SETLOCAL ENABLEDELAYEDEXPANSION
    call set "nname=%%name!counter!%%"
    ren "!fname!" "!nname!%%~xa"
    endlocal
)
도움이 되었습니까?

해결책

작업 경로를 추가하기 만하면됩니다.

@echo off&setlocal
set "workingpath=%userprofile%\Downloads"
set "name1=Bart"
set "name2=Carl"
set "name3=Judy"
for /f "delims=" %%a in ('dir "%workingpath%\Export_*.csv" /b /a-d /o-d') do (
    set "fname=%%~a"
    set /a counter+=1
    SETLOCAL ENABLEDELAYEDEXPANSION
    call set "nname=%%name!counter!%%"
    ren "%workingpath%\!fname!" "!nname!%%~xa"
    endlocal
)

다른 팁

Endoro는 명시된 문제에 대한 좋은 작업 솔루션을 가지고 있습니다. 또 다른 옵션은 파일이있는 위치를 간단히 푸시하는 것입니다. 그런 다음 더 이상 코드의 나머지 부분에 경로를 포함 할 필요가 없습니다.

질문과 관련이없는 다른 요점 :

다른 프로세스가 이미 값을 숫자로 설정하는 경우를 대비하여 카운터를 0으로 초기화하는 것이 좋습니다.

당신은 정말로 필요하지 않습니다 nname 변하기 쉬운.

통화 구조를 사용할 필요가 없도록 카운터 값을 변수로 전송하는 것이 좋습니다. (모르는 사람들을 위해 지연된 확장 토글은 보호하는 것입니다. ! 파일 이름에있을 수있는 문자).

@echo off
setlocal
set "name1=Bart"
set "name2=Carl"
set "name3=Judy"
pushd "C:\Users\%username%\Downloads"
set /a counter=0
for /f "delims=" %%a in ('dir Export_*.csv /b /a-d /o-d') do (
  set "fname=%%~a"
  set /a counter+=1
  setlocal enableDelayedExpansion
  for %%N in (!counter!) do (
    endlocal
    ren "!fname!" "!name%%N!.csv"
  )
)
popd

마지막으로, /n 옵션을 사용한 Findstr는 전화 또는 추가로 추가로 제거 할 수 있습니다.

@echo off
setlocal
set "name1=Bart"
set "name2=Carl"
set "name3=Judy"
pushd "C:\Users\%username%\Downloads"
for /f "tokens=1* delims=:" %%A in (
  'dir Export_*.csv /b /a-d /o-d ^| findstr /n "^"'
) do (
  set "fname=%%~B"
  setlocal enableDelayedExpansion
  ren "!fname!" "!name%%A!.csv"
  endlocal
)
popd

@cbmanica가 맞습니다 : 디렉토리가 변수에 포함되지 않습니다. fname, 따라서 수동으로 지정해야합니다. ren 명령.

@echo off
setlocal ENABLEDELAYEDEXPANSION
set "name1=Bart"
set "name2=Carl"
set "name3=Judy"
set "dir=C:\Users\%username%\Downloads\"
for /f "delims=" %%a in ('dir %dir%Export_*.csv /b /a-d /o-d') do (
    set "fname=%%~a"
    set /a counter+=1
    :: <Comment> In the below line is the use of "call" necessary? </Comment>
    call set "nname=%%name!counter!%%"
    ren "!dir!!fname!" "!dir!!nname!%%~xa"
)
endlocal

그것은 당신이 원하는 것을 정확하게 수행해야합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top