У меня проблемы с обработкой файлов с именами, которые содержат "^"
(Карат).
Что я замечаю, так это то, что если я использую двойные кавычки при оценке имен файлов, «Карат» удваивается. Если я не использую двойные кавычки, «Караты» в именах файлов НЕ удваиваются (сохраняются), но, поскольку некоторые из имен файлов содержат встроенные пробелы, я должен оценить имена файлов с помощью двойных кавычек.
В качестве примера у меня есть папка, которая содержит несколько файлов:
G:\Test-folder\Abcxyz 1.txt
G:\Test-folder\Abcxyz2.txt
G:\Test-folder\Abcxyz3.txt
G:\Test-folder\Abc^xyz 1.txt
G:\Test-folder\Abc^xyz2.txt
G:\Test-folder\Abc^xyz3^.txt
У меня есть пакетный скрипт, который собирает имена файлов, затем читает имена файлов и обрабатывает каждый файл.
@echo off
rem collect the filenames
dir /s /b "G:\Test-folder\ab*" > "G:\Test-folder\list.txt"
rem Note: here I have an opportunity to inspect and modify the filenames as necessary, but I have not found any modifications that solve this problem.
rem process each file
for /f "usebackq delims=" %%f in ("G:\Test-folder\list.txt") do call :work "%%~f"
@echo.
@echo Back: f1="%f1%"
@echo.
@echo.
@echo Running again, with "setlocal enabledelayedexpansion".
@echo.
for /f "usebackq delims=" %%f in ("G:\Test-folder\list.txt") do call :work2 "%%~f"
@echo.
@echo Back: f2="%f2%"
@echo.
goto :EOF
:work
rem :work
set "f1=%~1"
if exist "%f1%" goto :dostuff
@echo.
@echo File "%f1%" not found.
@echo %f1%
@echo "%~1"
@echo %~1
@echo.
goto :EOF
:dostuff
rem do some stuff :dostuff
@echo File "%f1%" found.
goto :EOF
:work2
rem :work2
setlocal enabledelayedexpansion
set "f2=%~1"
if exist "!f2!" goto :dostuff2
@echo.
@echo File "!f2!" not found.
@echo !f2!
@echo "%~1"
@echo %~1
@echo.
endlocal
goto :EOF
:dostuff2
rem do some stuff :dostuff2
@echo File "!f2!" found.
endlocal
goto :EOF
Запустив этот скрипт, я получаю следующий вывод:
File "G:\Test-folder\Abcxyz 1.txt" found.
File "G:\Test-folder\Abcxyz2.txt" found.
File "G:\Test-folder\Abcxyz3.txt" found.
File "G:\Test-folder\Abc^^xyz 1.txt" not found.
G:\Test-folder\Abc^xyz 1.txt
"G:\Test-folder\Abc^^xyz 1.txt"
G:\Test-folder\Abc^xyz 1.txt
File "G:\Test-folder\Abc^^xyz2.txt" not found.
G:\Test-folder\Abc^xyz2.txt
"G:\Test-folder\Abc^^xyz2.txt"
G:\Test-folder\Abc^xyz2.txt
File "G:\Test-folder\Abc^^xyz3^^.txt" not found.
G:\Test-folder\Abc^xyz3^.txt
"G:\Test-folder\Abc^^xyz3^^.txt"
G:\Test-folder\Abc^xyz3^.txt
Back: f1="G:\Test-folder\Abc^^xyz3^^.txt"
Running again, with "setlocal enabledelayedexpansion".
File "G:\Test-folder\Abcxyz 1.txt" found.
File "G:\Test-folder\Abcxyz2.txt" found.
File "G:\Test-folder\Abcxyz3.txt" found.
File "G:\Test-folder\Abc^^xyz 1.txt" not found.
G:\Test-folder\Abc^^xyz 1.txt
"G:\Test-folder\Abc^^xyz 1.txt"
G:\Test-folder\Abc^xyz 1.txt
File "G:\Test-folder\Abc^^xyz2.txt" not found.
G:\Test-folder\Abc^^xyz2.txt
"G:\Test-folder\Abc^^xyz2.txt"
G:\Test-folder\Abc^xyz2.txt
File "G:\Test-folder\Abc^^xyz3^^.txt" not found.
G:\Test-folder\Abc^^xyz3^^.txt
"G:\Test-folder\Abc^^xyz3^^.txt"
G:\Test-folder\Abc^xyz3^.txt
Back: f2=""
Так или иначе, с использованием или без использования "enabledelayedexpansion"
, я не могу обрабатывать файлы с именами, которые содержат "^"
(Карат).
Любые идеи о том, как это сделать, или что я делаю не так?