আমি একটি ধারণকারী ধারণকারী ফাইল প্রক্রিয়াকরণ সমস্যা হচ্ছে "^"
(ক্যারেট)।
আমি যা দেখছি তা হল যে যদি ফাইল নামগুলি মূল্যায়ন করার সময় আমি ডবল উদ্ধৃতি ব্যবহার করি তবে "ক্যারেটের" দ্বিগুণ হবে। যদি আমি ডবল কোটগুলি ব্যবহার করি না, তবে ফাইলের নামগুলিতে "ক্যারেটগুলির" দ্বিগুণ (সংরক্ষিত) নয়, তবে কিছু ফাইলের নাম এম্বেডেড স্পেস রয়েছে, তাই আমাকে দুটি উদ্ধৃতি দিয়ে ফাইলের নামগুলি মূল্যায়ন করতে হবে।
উদাহরণস্বরূপ, আমার একটি ফোল্ডার আছে যা কিছু ফাইল রয়েছে:
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"
, আমি একটি নাম ধারণকারী ফাইল প্রক্রিয়া করতে পারবেন না "^"
(ক্যারেট)।
কিভাবে এই ধারনা, অথবা কি আমি ভুল করছি?
:work
সাবরুটিন। তাই করতে, যোগ করুন set "f1=%f1:^^=^%"
ঠিক পরে set
কমান্ড। তবে ভাল সমাধান হতে পারে।
literal
মত সুইচGet-Content -literal "D:\abc [def] ^ xyz.txt"
যা সব বিশেষ অক্ষর সঙ্গে ফাইল প্রক্রিয়া করতে পারেন