2009-05-01 4 views

답변

1

, 당신은 사용할 수 있습니다

@echo off 
setlocal EnableDelayedExpansion 

REM loop over all files in the cwd 
for /f %%a in ('dir /a-d /b') do (
    REM store this filename in a variable so we can do substringing 
    set ThisFileName=%%a 
    REM now take a substring 
    set ThisShortFileName=!ThisFileName:~0,255! 
    REM finally, the rename: 
    echo ren %%a !ThisShortFileName! 
) 


:EOF 
endlocal 

(참고 : 나는 이름 바꾸기 명령 전에 에코를 추가 한 너무 시각적 실제로 전에 작동하는지 확인할 수 있습니다 그것을 실행. 내 상자에서 작동합니다.)

나는 떠들썩한 파티를위한 비슷한 스크립트를 만들 수있는 지금 * 괜찬아 상자에 확신 사람,하지만 난 윈도우의 세계 :

행운을 빕니다에 갇혀있어 !

+0

이 작업을했지만 파일 이름을 더 짧게 만들려면 디렉터리가 255 자로 계산되어야합니다. –

0
$ cat truncname 
#!/bin/bash 
# requires basename, dirname, and sed 
mv $1 `dirname $1`/`basename $1 | sed 's/^\(.\{0,255\}\).*/\1/'` 
$ chmod a+x truncname 
$ find . -exec ./truncname {} \; 
+0

나는 폴더에 쉘 스크립트를 실행하려고 다음과 같은 오류 있어요 : 프롬프트/미디어/DUALOS $ 쉬 ~/truncname.sh 물건 가 /home/username/truncname.sh : 1 : $ : 찾을 수 없습니다 mv :'stuff '를 자신의 서브 디렉토리'./stuff/stuff'로 옮길 수 없습니다 /home/username/truncname.sh : 5 : $ : 찾을 수 없음 /home/username/truncname.sh : 6 : $ : 찾을 수 없음 –

1

이 PWD의로 쉘이 NTFS 디렉터리에 앉아 있다고 가정 : 데이브의 나오지 기반 버전과 마찬가지로

for f in *; do mv $f ${f:0:255}; done

하지만, 파일 당 간부를 피할 수 있습니다. 최대 커맨드 라인 제한으로 인해 정말 큰 dir에 불어서, 서브 디렉토리를 수행하지 않습니다.

관련 문제