Board logo

标题: [文件操作] net use 似乎不支持含有空格的路径,加“”无效,怎么解决 [打印本页]

作者: hentai87    时间: 3 天前 12:08     标题: net use 似乎不支持含有空格的路径,加“”无效,怎么解决

本帖最后由 hentai87 于 2024-11-19 13:49 编辑
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. :: 创建或清空日志文件
  4. set "log_file=%temp%\rename_files_log.txt"
  5. > "%log_file%" echo 日志文件 - %date% %time%
  6. :: 检查并映射网络驱动器
  7. :check_drive
  8. set "drive=Y:"
  9. echo net use %drive% %~dp0
  10. net use %drive% %~dp0
  11. if errorlevel 1 (
  12.     set "drive=X:"
  13.     net use %drive% %~dp0
  14.     if errorlevel 1 (
  15.         echo 无法映射网络驱动器,请手动选择一个未被使用的驱动器字母。 >> "%log_file%"
  16.         pause
  17.         exit /b
  18.     )
  19. )
  20. echo 成功映射驱动器 %drive% 到 %~dp0 >> "%log_file%"
  21. :: 切换到映射的驱动器
  22. %drive%
  23. :: 获取当前目录
  24. set "current_dir=%CD%"
  25. echo 当前目录: %current_dir% >> "%log_file%"
  26. for %%F in (*) do (
  27.     if "%%F" neq "%~nx0" (
  28.         for /f "tokens=1-3 delims=/ " %%a in ("%%~tF") do (
  29.             set "formatted_date=%%a%%b%%c"
  30.         )
  31.         
  32.         set "file_name=%%F"
  33.         set "prefix=!file_name:~0,8!"
  34.         
  35.         if "!prefix!" == "!formatted_date!" (
  36.             echo 文件 "%%F" 已经包含日期前缀,跳过。 >> "%log_file%"
  37.         ) else (
  38.             set "counter=0"
  39.             :check_conflict
  40.             set "new_name=!formatted_date!"
  41.             if !counter! gtr 0 set "new_name=!formatted_date!-!counter!"
  42.             
  43.             if exist "!new_name!_%%F" (
  44.                 set /a counter+=1
  45.                 goto check_conflict
  46.             )
  47.             ren "%%F" "!new_name! %%F"
  48.             if errorlevel 1 (
  49.                 echo 重命名 "%%F" 失败。 >> "%log_file%"
  50.             ) else (
  51.                 echo 重命名 "%%F" 为 "!new_name!_%%F" >> "%log_file%"
  52.             )
  53.         )
  54.     )
  55. )
  56. echo 操作完成。日志文件位于: %log_file%
  57. :: 断开映射驱动器
  58. net use %drive% /delete /yes
  59. if errorlevel 1 (
  60.     echo 断开驱动器 %drive% 失败。请手动断开。 >> "%log_file%"
  61. ) else (
  62.     echo 成功断开驱动器 %drive%。 >> "%log_file%"
  63. )
  64. pause
复制代码
%~dp0这个路径有可能有空格
这个是重命名局域网共享文件的,但是遇到文件夹含有空格就报错,文件名含有!也报错,希望解决这2个报错,并增加支持本地路径
作者: flashercs    时间: 3 天前 20:01

  1. @echo off
  2. :: 创建或清空日志文件
  3. set "log_file=%temp%\rename_files_log.txt"
  4. > "%log_file%" echo 日志文件 - %date% %time%
  5. :: 获取当前目录
  6. set "current_dir=%~dp0"
  7. echo 当前目录: "%current_dir%" >> "%log_file%"
  8. (
  9. for %%F in ("%~dp0*") do (
  10.     if "%%~fF" neq "%~f0" (
  11.         for /f "tokens=1-3 delims=/- " %%a in ("%%~tF") do (
  12.             set "formatted_date=%%a%%b%%c"
  13.             set "fullName=%%~fF"
  14.             set "dp=%%~dpF"
  15.             set "old_name=%%~nxF"
  16.             call :myren
  17.         )
  18.     )
  19. )
  20. ) >> "%log_file%"
  21. echo 操作完成。日志文件位于: %log_file%
  22. endlocal
  23. pause
  24. exit
  25. :myren
  26. if "%old_name:~0,8%"=="%formatted_date%" (
  27.   echo 文件 "%fullName%" 已经包含日期前缀,跳过。
  28.   exit /b
  29. )
  30. set "new_name=%formatted_date%_%old_name%"
  31. set "new_path=%dp%%new_name%"
  32. set "counter=0"
  33. :loop1
  34. if not exist "%new_path%" goto next
  35. set /a "counter+=1"
  36. set "new_name=%formatted_date%-%counter%_%old_name%"
  37. set "new_path=%dp%%new_name%"
  38. goto loop1
  39. :next
  40. ren "%fullName%" "%new_name%"
  41. if errorlevel 1 (
  42.     echo 重命名 "%fullName%" 失败。
  43. ) else (
  44.     echo 重命名 "%fullName%" 为 "%new_name%"
  45. )
  46. exit /b
复制代码





欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2