强制将长文件名传递给dos命令

时间:2011-02-18 11:42:15

标签: windows batch-file

我遇到以下简单dos命令的问题:

FOR %%f IN (.\07_PROCEDURES\DataSources\*.sql) DO echo "%%f"

它为每个sql扩展名的文件执行一些操作。一切都很好,除了长名。当目录包含带有sql_扩展名的文件时,它们也会被选中。但是这种行为取决于文件系统上的8.3文件是turned on or off。如果它们已打开(大多数计算机上的默认选项),则会传递sql_,因为会裁剪扩展程序。

如何强制for获取长文件名?谢谢!

P.S。不提供powershell升级。

2 个答案:

答案 0 :(得分:2)

您可以尝试检查循环本身的扩展名

for %%f in (*.sql) do  (
  if /i "%%~xf" EQU ".sql" echo %%f
)

答案 1 :(得分:1)

您可以尝试这样的事情:

for /f "usebackq delims=" %%f in (`dir /b .\*.sql ^| findstr /r .*\.sql$`) do @echo "%%f"