2009-05-01 71 views

回答

1

如果你有機會到Windows外殼,您可以使用:

@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 

(注:我重命名命令之前增加了迴音,所以您可以直觀地驗證它之前的實際工作運行它。工作對我的箱子。)

我敢肯定有人誰是在* nix盒可馬上作出的bash一個類似的腳本,但我堅持在Windows世界:)

好運!

+0

這個工作,但我不得不使文件名更短,因爲目錄計爲255個字符。 – 2009-05-21 20:27:21

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

我試過一個文件夾上運行shell腳本,並得到了以下錯誤: 提示:/媒體/ DUALOS $ SH〜/ truncname.sh東西 /home/username/truncname.sh:1:$:未找到 mv:無法將`stuff'移動到它自己的子目錄,`./stuff/stuff' /home/username/truncname.sh:5:$:not found /home/username/truncname.sh:6:$ :找不到 – 2009-05-02 23:36:24

1

假設殼坐在NTFS目錄,因爲它的PWD:

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

戴夫的sed的基礎版本類似,但避免了每個文件的高管。由於最大命令行數限制,會炸燬一個真正巨大的目錄,並且不會執行子目錄。