加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

[转]copy文件因文件名过长导致出错,如何找出这些文件

(2014-12-08 21:15:05)
标签:

it

分类: 计算机与 Internet
您好:我现在需要将一个目录下的所有文件copy到一台nas上,但是通过xcopy复制时因为一些文件的文件名特别长导致nas无法接收,复制失败。有什么方法可以查找出现在目录中文件名超过20个字符或者更多的文件?谢谢!

全部回复

你可以通過如下批處理文件找出指定目錄下文件名(或目錄名)長度大於等於 20 的所有文件.

批處理文件 findfl.bat

 


@echo off
 REM 只查找文件
 REM 只包含文件名
 REM for /f "tokens=*" %%f in ('dir %1\*.* /a-d/b') do call findx.bat "%~f1\%%f" "%%~nf"
 
 REM 包含文件名和擴展名
 REM for /f "tokens=*" %%f in ('dir %1\*.* /a-d/b') do call findx.bat "%~f1\%%f" "%%~nxf"
 
REM 同時查找子目錄和文件
 REM 只包含文件名
 REM for /f "tokens=*" %%f in ('dir %1\*.* /a/b') do call findx.bat "%~f1\%%f" "%%~nf"
 
 REM 包含文件名和擴展名
 for /f "tokens=*" %%f in ('dir %1\*.* /a/b') do call findx.bat "%~f1\%%f" "%%~nxf"

 


批處理文件 findx.bat

 


@echo off
 set filename=%1
 set str=%2
 for /f "tokens=*" %%n in ('echo %filename%') do set filename=%%~n
 for /f "tokens=*" %%m in ('echo %str%') do set str=%%~m
 set str=%str:~19,1%
 echo %str% | find /i "%str%" > nul
 if %errorlevel% equ 0 (echo %filename%)
 REM 替換為下面這句代碼, 將會把結果重定向到當前用戶目錄下的文件 result.txt
 REM 你可以通過 notepad %userprofile%\result.txt
 REM 或者 explorer /select,%userprofile%\result.txt
 REM 進行訪問
 REM if %errorlevel% equ 0 (attrib -r -s -h %userprofile%\result.txt && echo %filename% >> %userprofile%\result.txt)

 

執行請這樣操作

findfl 目錄名

注意, 目錄名最後不用加 \, 例如 findfl C:\test

如果目錄名存在空格, 請用半角雙引號括起來
例如: findfl "C:\t est"
對於遍歷子目錄的所有文件, 請這樣執行
for /f "tokens=*" %d in ('dir "目錄名" /ad/b/s') do findfl.bat "%d"

你可以將這兩個批處理文件以管理員身份放置到 \Windows\system32 目錄中, 這樣可以直接調用.
 
【转自:MSDN
2011年8月8日 7:52

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有