2009-05-01 86 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的基础版本类似,但避免了每个文件的高管。由于最大命令行数限制,会炸毁一个真正巨大的目录,并且不会执行子目录。