ディレクトリを通過し、すべての *.txt ファイルを dest フォルダーに移動して、txt ファイルの最初の文字から開始する DOS バッチ プロセスを作成したいと考えています。
元。
abc.txt はフォルダー "a"
に移動し、def.txt はフォルダー "d" に移動します
。
ディレクトリを通過し、すべての *.txt ファイルを dest フォルダーに移動して、txt ファイルの最初の文字から開始する DOS バッチ プロセスを作成したいと考えています。
元。
abc.txt はフォルダー "a"
に移動し、def.txt はフォルダー "d" に移動します
。
コマンドラインから:
for %i in (*.txt) do (set FOLDER=%i & move %i %FOLDER:~0,1%)
バッチファイルでは、次のように%を2倍にする必要があります。
for %%i in (*.txt) do (set FOLDER=%%i & move %%i %FOLDER:~0,1%)
問題のポイントは最初の文字を抽出することだと思います。
〜charを使用して、ファイル名の最初の文字を抽出できます
set str=filename
echo %str:~0,1%
f
biterscripting chex コマンド (文字抽出プログラム)を使用して、ファイル名の最初の文字を抽出できます。これがスクリプトです。ファイルが C:\My Directory にあるとします。
# Script move1.txt
# Change directory to My Directory.
cd "C:\My Directory"
# Collect a list of *.txt files.
var str list ; lf -n "*.txt" > $list
# Go thru files one by one.
while ($list <> "")
do
# Get the next file.
var str file ; lex "1" $list > $file
# $file now has full path of a found *.txt file. Get just the file name.
var str filename ; stex -p "^/^l[" $file > $filename
# $filename has just the file name. Get the first character.
var str firstchar ; chex -p "1" $filename > $firstchar
# $firstchar now has the first char of file name. The folder where we
# want to move this file is, then, C:\Destimation Folder\$firstchar .
var str destfolder ; set $destfolder = "C:\Destination Folder\"+$firstchar
# Move $file to $destfolder.
system move ("\""+$file+"\"") ("\""+$destfolder+"\"")
done
スクリプトはバイタースクリプティング ( http://www.biterscripting.com ) です。試すには、スクリプトを C:\Scripts\move1.txt として保存し、biterscripting を開始して、次のコマンドを入力します。
script move1.txt
スクリプトを定期的に実行する必要がある場合は、タスク スケジューラで次のコマンドをスケジュールします。
"C:\biterScripting\biterScripting.exe" "move1.txt"
私はスクリプトをテストしていません。サンプル ファイルでテストしてください。「C:\My Directory」と「C:\Destination Folder」を正しい値に変更してください。ファイル名とパスには必ず二重引用符を使用してください。
これはどうですか?
一般的な形式: for %a in (abcdefghijklmnopqrstu vwxyz) do if not exist %a\nul md %a & if exist %a* move %a* %a
この mod は txt ファイルのみを実行します (OP ごと): ... %a*.txt が存在する場合は %a*.txt %a を移動します
または、コマンドラインで拡張子の一致を許可するために、「... if exist %%a*%1 move %%a*%1 %%a」を実行するようにバットでこれを強化できます。これにはおそらく %1 にドットが必要です (今はテストしたくありません。これが問題になる場合は、いつでも if%1!==! を使用して、一般的な形式と %1 固有の形式のどちらかを選択できます。ドットはすでに提供されています。
もちろん、%a はコマンドライン用であり、バットの場合は通常どおり %s を 2 倍にします (%a -> %%a)。
この解決策は、ファイル名にスペースが含まれるエラーを回避しますが、すべての文字のサブディレクトリが作成されます (その特定の文字で始まるファイルがなかったとしても)。
そして、上の元の行を入力するよりも、これを入力するのに時間がかかりました... :-)
現在のフォルダー内のすべての TSV ファイルをカウントします。
for /f "delims=|" %%f in ('dir *.tsv /b') do (
echo %%~nf
findstr /R /N "^" %%f | find /C ":"
)
copy sourcepath\a*.txt destinationpath\a
コピー元パス\b*.txt コピー先パス\b