Windows 强制将长文件名传递给dos以执行命令

Windows 强制将长文件名传递给dos以执行命令,windows,batch-file,Windows,Batch File,我对以下简单的dos命令有问题: FOR %%f IN (.\07_PROCEDURES\DataSources\*.sql) DO echo "%%f" 它对扩展名为sql的每个文件执行一些操作。除了长名字,一切都很好。当目录包含扩展名为sql\u的文件时,它们也会被拾取。但这种行为取决于8.3文件是否在文件系统中。如果它们被打开(大多数计算机上的默认选择)sql\uu将被传递,因为扩展被裁剪 如何强制获取长文件名?谢谢 p.S.不提供powershell升级。您可以尝试以下方法: for

我对以下简单的dos命令有问题:

FOR %%f IN (.\07_PROCEDURES\DataSources\*.sql) DO echo "%%f"
它对扩展名为
sql
的每个文件执行一些操作。除了长名字,一切都很好。当目录包含扩展名为
sql\u
的文件时,它们也会被拾取。但这种行为取决于8.3文件是否在文件系统中。如果它们被打开(大多数计算机上的默认选择)
sql\uu
将被传递,因为扩展被裁剪

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


p.S.不提供powershell升级。

您可以尝试以下方法:

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

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

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

很好,除了一件事。它只给出文件名,没有路径。但我需要一条路。请参阅相关的更新代码。想办法加入他们。。。