[转]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"
【转自:MSDN】
2011年8月8日 7:52
后一篇:别时意更深

加载中…